質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.40%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

3回答

668閲覧

【C#】関数の引数に変数を入れるのはなしですか?【Unity】

oblada

総合スコア52

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2024/07/26 07:09

関数の引数に変数を入れるのはなしでしょうか?
下記のコードのようにしましたが動かないです。
コードも間違えてるかもしれません。

該当のソースコード

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class test : MonoBehaviour
{
int a;
int b;
int c;
int d;

void Start() { a = 2; d = kansuu2(a); Debug.Log(d); } private int kansuu2(int a) { c = a; return c; }

}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fiveHundred

2024/07/26 07:24

> 関数の引数に変数を入れるのはなしでしょうか? それを聞く以前の問題として、 > 下記のコードのようにしましたが動かないです。 > コードも間違えてるかもしれません。 を直すのが先決なのではないでしょうか。 さらに言うと、「動かないです」ではなく、「エラーで動かないのであれば、エラーメッセージ」「意図通りに動かないのであれば、想定している動作と今の動作」を提示する必要があると思いますが、違いますか。
oblada

2024/07/26 07:29

じゃあ、良いです。 すみませんでした。
guest

回答3

0

関数の引数に変数を入れる

っていうのが,提示されているコードでいうと,どこの何のことを指しているのでしょう?
というのが正直わかりませんが……

d = kansuu2(a);

という行で
「関数 kansuu2 を呼び出す際に,その引数に変数 a を渡しているけども,これはOKか?」というような話?
すなわち,「関数の引数に渡すのはリテラルじゃなくても良いのか?」 みたいな問いなの…か……な?

もしもそういう話であれば,別にそれを禁止する理由は何も無いです.
それ自体はごく普通のことです.
(なぜ「動かない」のかわかりませんが,その理由はどこか別のところにあるのでしょう.きっと.)


あるいは,ひょっとしたら,
「自身のメソッドを呼ぶのに際して,自身のメンバ変数を引数に渡すってのはどうなの?(渡さなくても内側で自身のメンバは使えるのに)」
みたいな問いなのでしょうか?

仮にそうだとしても,これもまた特に禁止される理由はないです.

投稿2024/07/26 08:19

編集2024/07/26 08:23
fana

総合スコア11893

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fiveHundred

2024/07/26 08:26

> (なぜ「動かない」のかわかりませんが,その理由はどこか別のところにあるのでしょう.きっと.) 私もそう思うのですが、困ったことにその原因追及を拒否されてしまっているので、どうしようもないんですよね。 お互いに利点が無い行動だと思いますが、どうしましょう。
fana

2024/07/26 08:28

なんか「エスパー回答してくれなきゃヤダ」っていうことみたいだから 頑張ってみたけど……外してたらごめんね. (その場合は他の人のエスパー能力に期待してね!)
fana

2024/07/26 08:30 編集

とりあえず提示コードだけ見ると,「dが2になりました」っていう動作結果になりそうですけど, 動く動かないとはまた別のところを問うているのかな? というエスパーをしてみた次第です.
fana

2024/07/26 09:11

> 私もそう思うのですが、困ったことにその原因追及を拒否されてしまっているので、どうしようもないんですよね。 > お互いに利点が無い行動だと思いますが、どうしましょう。 「もっとまともな情報が無いと答えられないよ」っていうコメントに対して 「情報を出すつもりはない」と返されるのであれば,そこはその意思を尊重するしかないでしょう. べつに我々には何かを解決する義理も義務もないので 何かの解決を放棄する意思を見せている相手に「そんなこと言わずに解決しようぜ!」とか働きかける必要はないと思います. そしたらもう,あとはこうやって適当にエスパー回答して遊ぶなり,最初から見なかったことにするなりすればよいんじゃないかな,と. (「サイトの使い方としてどうなのか」的な話をする方向というのもあり得るかもしれませんが,経験上 850% くらいの確率で無意味なのでお勧めしません)
guest

0

関数の引数に変数を入れるのはなしでしょうか?

「関数内でしか使わないのであれば、関数内で定義する」が鉄則です。
今回の場合は、全て関数内で済みますので「なし」でしょう。
(とはいえ、これで動くかどうかは別問題です)
「毎回定義するのが面倒だから、同じ名前のメンバー変数を定義して使いまわす」という考えであればなおさら駄目です(超有名なアンチパターンです)。

「複数の関数で呼び出す」なら「あり」かもしれませんが、「その変数を用意しないと実行できない」という依存関係が生まれてしまうので、よく考える必要があります。


すみません、これ「メンバー変数を関数内で呼び出す」と勘違いしていました。
あまりにもコードが悪いので勘違いしました。

C#

1 d = kansuu2(a);

と言う具合に、関数kansuu2に変数aを引数にするぐらいであれば、特に問題はありません。
しかし、

C#

1int a; // ① 2 3private int kansuu2(int a) //② 4{ 5 c = a; // ③ 6 return c; 7}

この①と②は同じ名前ですが、別のものとして扱われます。
例えば③では、②が使われます。①ではありません。

このように、同じの名前でも別のものが存在することがあります。
蛇足にはなりますが「関数内でしか使わないのであれば、関数内で定義する」と言った理由は、これに対する問題を避けるためです。

投稿2024/07/26 07:44

編集2024/07/26 08:24
fiveHundred

総合スコア10037

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fana

2024/07/26 08:34

あー,なるほど, > 関数の引数に変数を入れる というのは, 「関数の引数名として,既存の(スコープ的に見えている)変数と同じ名前を用いてもよいのか?」 という問いである可能性も考えられますね.
guest

0

自己解決

結局、このサイトは意味ないですよね。

投稿2024/07/26 07:26

oblada

総合スコア52

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

oblada

2024/07/26 07:28

ありかなしかを言っていただいたら、良いだけだと思うんですけど。
fiveHundred

2024/07/26 07:31

そもそも私は、解決に必要な情報を要求しただけです。 それが出来ないのであれば、誰も解決しようがないですし、それで「意味がない」状況に陥っているのではないかと思います。
oblada

2024/07/26 07:38

情報をいらないでしょ。
fiveHundred

2024/07/26 07:47

その前提で回答しましたが、「守っているから動作する」わけではありません(そもそも他が原因だと思われる)ので、それで文句を言うのはやめてくださいね。
otn

2024/07/26 11:16

> ありかなしかを言っていただいたら、良いだけだと思うんですけど。 質問が、 > 関数の引数に変数を入れるのはなしでしょうか? の1行だけであれば、そんなの、ありに決まってます。他人の書いたプログラム見たこと無いのですか?このサイトの利用者に、まさかプログラムを見たこと無い人がいるとは思わないので、その1行だけ質問したいだけの人だったとは、普通思わないです。 で、質問文に「動かない」というコードが書いてあるので、コードを動くようにしてあげようと親切心を出した人が何人かいたわけです。 > 結局、このサイトは意味ないですよね。 他人とコミュニケーションする意思のない人にはQAサイトはどこであれ意味ないと思います。
umimi

2024/07/30 02:37

> 他人とコミュニケーションする意思のない人にはQAサイトはどこであれ意味ないと思います。 質問主に、『答えが欲しい』というレベルでは、コミュニケーションする意思があるようです。 今回は、質問主と回答者達の間で、残念ながら、行き違いが生じてしまいました。 質問主には、質問しても、答えがつかなかった経験があるようです。 ワシが見た限りでは、答えるのが難しい質問ばかりです。 質問が、おかしすぎて。 質問の質を改善しないと、質問者が期待する回答が付くのは、難しいでしょう。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.40%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問