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

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

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

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

Unity

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

Q&A

解決済

5回答

1272閲覧

UnityではじめるC#、引数について(string messenger)

matomaru

総合スコア3

C#

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

Unity

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

0グッド

0クリップ

投稿2021/06/21 04:11

現在、「UnityではじめるC#」という書籍を読んで勉強中です。

引数について分かりかけてきたところで、急に突き放されてしまったページがあって、混乱しています。
##問題のコード(後半です。)

html

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class Lesson1 : MonoBehaviour 6{ 7 public string PlayerName; 8 9 // Start is called before the first frame update 10 void Start() 11 { 12 13 } 14 15 // Update is called once per frame 16 void Update() 17 { 18 string message = GetMessage(PlayerName); 19 UnityEngine.Debug.Log(message); 20 } 21 22 string GetMessage(string messenger) 23 { 24 string curtime = System.DateTime.Now.ToLongTimeString(); 25 return PlayerName + "「今は" + curtime + "」"; 26 } 27} 28

上記を実行すると、コンソールに、**名前「今は12:35:37 PM」**とでます。

##理解していること
void Updateというメソッドの中で、messageを定義して、
次の行で、それをコンソールに表示してね!としている。
(Unityのコンソール)

じゃあそのmessageに代入されたGetMessageってなに?というのが、
さらに下の行にあって、メソッドが作られている。

つまりmessageを呼び出すと、このstring GetMessageが呼び出されて、
returnによって名前と、時間を含む文字が返ってくる。

という感じだと理解しました。
##分からないこと
最後のメソッドの、string GetMassage(string messenger)のカッコ内、
string messengerですが、この意味が分かりません。
引数ということは分かるのですが、PlayerNameのように、定義もされてないし、
なんのためなのか分かりません。
なので、いらないのかな?と思って、()と空の状態で実行したところエラーになってしまいました。
全く別の名前なら上手く行ったので、何でもいいの!?とますます混乱しています。

##知りたいこと
このstring messengerがなぜ必要なのか、一体何をしているのか、もし教えていただけたら嬉しいです!

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

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

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

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

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

Zuishin

2021/06/21 04:14

これがこのまま本に書いてあったのであれば、別の本をお勧めします。 初心者の作ったものにしか見えません。
matomaru

2021/06/21 04:24

ご回答ありがとうございます! 初心者のための入門書とありますし、まだ最初の数ページのことなので、 簡単に書いてあるということではないのですか?
Zuishin

2021/06/21 04:27

簡単に書いてあるということではなく、アンチパターンが複数含まれています。
退会済みユーザー

退会済みユーザー

2021/06/21 04:37

質問のコードは本の通り書いてないのでは? 転記ミスをする質問者さんはここ Teratail によくいます。実は以下のようになっているとか? string GetMessage(string messenger) { string curtime = System.DateTime.Now.ToLongTimeString(); return messenger + "「今は" + curtime + "」"; }
matomaru

2021/06/21 04:57

本に誤りがあったようです。 SurferOnWwwさんのように自身で考えられたら良かったのですが‥。精進します。 ご意見ありがとうございました!
退会済みユーザー

退会済みユーザー

2021/06/21 05:01

返答をありがとうございました。 そうでしたか、本なのに・・・
guest

回答5

0

GetMessageメソッド内のPlayerNameはmessengerの誤植でしょう。

string GetMessage(string messenger) { string curtime = System.DateTime.Now.ToLongTimeString(); return messenger + "「今は" + curtime + "」"; }

こう書かれていれば「任意の messenger から時間が伝えられる」という文脈に一致します。

投稿2021/06/21 04:32

tor4kichi

総合スコア769

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

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

matomaru

2021/06/21 04:52

ご回答ありがとうございます! 誤植でした、、messengerならばスッキリとします! 自分で気付けるようになりたいです。
guest

0

void Updateというメソッドの中で、messageを定義して、
次の行で、それをコンソールに表示してね!としている。
(Unityのコンソール)

はい

じゃあそのmessageに代入されたGetMessageってなに?というのが、
さらに下の行にあって、メソッドが作られている。

はい
正確にはmessageGetMessageの返り値が代入されています。

つまりmessageを呼び出すと、このstring GetMessageが呼び出されて、
returnによって名前と、時間を含む文字が返ってくる。

messageは変数です。呼び出すものじゃないです。

最後のメソッドの、string GetMassage(string messenger)のカッコ内、
string messengerですが、この意味が分かりません。
引数ということは分かるのですが、PlayerNameのように、定義もされてないし、

引数として書いてある時点で定義です。

なんのためなのか分かりません。

プログラムは目的がなくても文法さえあっていれば動きます。

なので、いらないのかな?と思って、()と空の状態で実行したところエラーになってしまいました。

エラーメッセージを読みましょう。

全く別の名前なら上手く行ったので、何でもいいの!?とますます混乱しています。

はい、引数名はなんでもいいです。


string GetMassage(string messenger)messengerを引数として定義しておきながら、
GetMessage()内で全くmessengerを使っていないから、意味がわからず混乱しておられるのかと思います。

混乱のもとである、定義した引数を全く使わないというのは文法上正しく、エラーになりません。
おそらくですけどその先のページで利用するコードを書くのではないでしょうか?

(またはただ単に質問者さんが書き間違えたかです。)

投稿2021/06/21 04:39

編集2021/06/21 04:41
ozwk

総合スコア13553

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

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

matomaru

2021/06/21 06:27

丁寧にありがとうございます! まだまだ変数や定義について、完全に理解できていないということがわかりました。 混乱の理由はおっしゃる通りで、書き換えても上手くいきました。勉強します!
guest

0

ベストアンサー

質問に書いてあるコードですが

C#

1 void Update() 2 { 3 string message = GetMessage(PlayerName); 4 UnityEngine.Debug.Log(message); 5 } 6 7 string GetMessage(string messenger) 8 { 9 string curtime = System.DateTime.Now.ToLongTimeString(); 10 return PlayerName + "「今は" + curtime + "」"; 11 }

ではなく

C#

1 void Update() 2 { 3 string message = GetMessage(PlayerName); 4 UnityEngine.Debug.Log(message); 5 } 6 7 string GetMessage(string messenger) 8 { 9 string curtime = System.DateTime.Now.ToLongTimeString(); 10 return messenger + "「今は" + curtime + "」"; 11 }

とあるべきです。

string GetMessage(string messenger)string messengerの部分は
GetMessage(PlayerName)といった感じでこの関数が呼ばれたときに渡されたPlayerNamemessengerという変数に格納されるよといった意味になります。

前者のコードですと引数として定義したmessengerを使用していないために引数の説明になっていないソースになります。
後者のソースですと引数とは何なのかが分かるのではないでしょうか。

投稿2021/06/21 04:36

YAmaGNZ

総合スコア10489

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

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

matomaru

2021/06/21 04:49

ご回答ありがとうございました! とても分かりやすいです!確かにmessengerであれば理解できます! 安心しました。
guest

0

変数ですから、呼び出し元と呼び出し先で型さえ一致していれば問題ありません(大抵の言語で同じ考え方と思います)。
もちろんあまりに意味がなかったり離れるようなネーミングはメンメナンス性に欠けるのでやめたほうが良いですが。

投稿2021/06/21 04:20

m.ts10806

総合スコア80875

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

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

0

string message = GetMessage(PlayerName);

ここで、GetMessage関数が実行されてます
その実行結果を、
string型の messageという名前の変数に代入してます

string message; という記述で、string型のmessageという名前の変数を定義している、というのはわかるでしょうか

投稿2021/06/21 04:19

編集2021/06/21 04:21
y_waiwai

総合スコア88042

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問