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

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

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

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

Q&A

解決済

4回答

11083閲覧

C#の引数()の意味

MitzKuno

総合スコア12

C#

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

1グッド

0クリップ

投稿2018/06/10 16:37

C#の勉強をしていて、プログラミングは、全くの初心者です。

それでは、質問の方なのですが。
C#の入門書を読んでいる時に、

using ……
using ……

Public class Lesson1 : Mono…… {

  void Start () {
Person p = new Person ();
p.firstname = "山田";
p.lasttname = "太郎";
Debug.Log (p.GetFullName ());
}
}

…中略…

class Person {
public string firstname;
public string lastname;

public string GetFullName () { return this.lastname + this.firstname;

}
}

というプログラミングが書いてあり、このプログラム自体は丁寧に説明されていて、VisualStudioを使って記入した際にエラーも無かったので理解できたのですが、
ただこのプログラミングの文章を自分で書いている際に、なぜ()(←引数だったと思うのですが)が付くものと付かないものがあるのかの説明が無く、いまいちこの()の付けどころだけがわかりませんでした。

具体的に言えば、

Person p = new Person ();

の部分は、なぜ左側には()が付かず、右側には()が付くのか?
その3行下の

Debug.Log (p.GetFullName ());

のp.GetFullNameの横にもなぜ()を書く必要があるのか?

また後半の

public string firstname; public string lastname; public string GetFullName ()

の部分もpublic string firstname;とpublic string lastname;には()が付かず、public string GetFullName ()には()が付く理由が、入門書には記述されていなかったため、このままでは入門書無しで自分でプログラミングを書く際にどういう時に()をつければいいのかわかりません。

できれば、勉強中にこの部分を理解しておきたいのですが、どなたかご教授していただけないでしょうか。
”そういうもの”という解答であれば、もうそれまでですが、何か説明可能な理由があれば知りたいです。
プログラミング初心者のため、質問自体が変になってしまっているかもしれないのですが、どうか教えてくださると助かります。
よろしくお願いします。

YDK👍を押しています

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

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

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

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

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

guest

回答4

0

ベストアンサー

こんにちは。

ご提示いただいたプログラムにコメントを追加してみましたのでご確認ください。

csharp

1using …… 2using …… 3 4Public class Lesson1 : Mono…… { 5 6 void Start () { 7 // ↓ "Person p" これはPersonクラス(型)のpという変数、という意味です。 8 Person p = new Person(); // ← これはコンストラクタという特別な関数を呼んでいます 9 p.firstname = "山田"; // ← これはPersonクラスのfirstname変数に値を代入しています 10 p.lasttname = "太郎"; // ← これはPersonクラスのlasttname変数に値を代入しています 11 Debug.Log(p.GetFullName()); // ← これはGetFullName関数を呼んで、その結果を引数としてLog関数を呼んでいます 12 } 13} 14 15//…中略… 16 17class Person { 18 public string firstname; // ← これはPersonクラスのメンバー変数です。 19 public string lastname; // ← これはPersonクラスのメンバー変数です。 20 21 // ↓ 例では省略されていますが、これがコンストラクタです。 22 // コンストラクタはクラスを初期化するための特別な関数です。 23 public Person(){ // ← これは関数です。 24 return; 25 } 26 27 public string GetFullName () { // ← これは関数です 28 // ↓ lastname変数の値とfirstname変数の値をくっつけています。 29 return this.lastname + this.firstname; 30 } 31}

色々な例外は置いておいて、シンプルに考えるなら、
C#関数を呼ぶとき、定義するときに()を付けます。

GetFullName()関数なので()をつけないといけません。
new Person()newというおまじないが付いていますが、関数なので()をつけないといけません。

Person pPerson型のpという名前の変数です、といっていいるだけです。
public string firstname; これはstring型のfirstnameという変数です、といっています。
変数を宣言(用意)する、アクセスするときは()をつけません。

変数は入れ物です。入れ物に名前をください!とお願いしても何もしてくれません。
関数は処理です。名前を返す処理に名前をください!とお願いすると、入れ物のデータをくっつけて返してくれます。

参考になれば幸いです。

投稿2018/06/11 07:17

g_uo

総合スコア212

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

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

MitzKuno

2018/06/14 11:31

いろいろと忙しく、ベストアンサーが遅れてしまってすみませんでした。 4件すべて読んで、g_uoさんが、一番わかりやすかったのでベストアンサーに選ばせていただきました。 たしかにおっしゃっていた説明通りに見ていくと理解できました。 ”関数を呼ぶとき、定義するときに()を付けます” これは、今後、必ず念頭に置きながら学んでいこうと思います。 ありがとうございました。
g_uo

2018/06/15 00:34

コメントありがとうございます。 後だしで申し訳ないですが、関数でも()をつけないこともあります。なので基本的な関数の使い方としてご理解いただければと存じます。 その()をつけないパターンは、質問者様の今後の学習過程で遭遇することと思います。そのとき"あぁこれのことね"と今回の質問を踏まえて読んでいただければいいかなと考えております。
guest

0

一言でいえば、「メソッド・コンストラクタ」を「呼ぶとき・定義するとき」に括弧が必要となります。

Person p = new Person ();

左辺は単なる変数の定義です。

public string firstname;とpublic string lastname;には()が付かず、

これらはメソッドではなく、フィールドの定義です。

投稿2018/06/10 22:27

maisumakun

総合スコア145183

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

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

0

C#に限らず、C言語系の言語では、キーワードの後ろのカッコは関数の実行を意味します
引数がある場合は、そのカッコの中に引数の記述が入りますね


Person p = new Person ();

p という変数に、Parsonという名前のクラスのコンストラクタを実行し、その結果を代入しています

Debug.Log (p.GetFullName ());

p.GetFullName という名前の関数を実行し、その実行結果を、Debug.Log 関数の引数としてこれを実行しています

投稿2018/06/10 23:16

編集2018/06/11 00:20
y_waiwai

総合スコア87774

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

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

0

まず、コードは"<code>"とあるボタンを押して、その中に書きましょう。

そのままだとインデント ( 半角スペースでやるやつ? ) が無視されるので読みにくくなります。


Person p = new Person ();

とあるのは、

左にあるの( Person ) が 型としてのもの。

int a = 100;

みたいなもの。

で、右が インスタンス生成するためのコンストラクタ呼び出し。なので引数が必要。( 引数を定義したときだけ )

() をつけると「関数であること」を明示します。JavaやC#の場合は "メソッド" とか "コンストラクタ"になるが。

もし p.GetFullName() のことを p.GetFullName と書くと、フィールド (C++ならメンバ変数) を参照しようとします。
C#なら プロパティも範囲に含まれますね。

少なくとも関数、メソッド、コンストラクタとはみなされません。

なのでエラーが出ます。

関数は基本的に引数を受け取り、処理し、データを返すものなので、引数が必要。

投稿2018/06/11 06:42

BeatStar

総合スコア4958

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問