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

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

ただいまの
回答率

90.51%

  • C#

    7385questions

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

C#の引数()の意味

解決済

回答 4

投稿

  • 評価
  • クリップ 0
  • VIEW 328

MitzKuno

score 4

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 ()には()が付く理由が、入門書には記述されていなかったため、このままでは入門書無しで自分でプログラミングを書く際にどういう時に()をつければいいのかわかりません。

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 4

checkベストアンサー

+2

こんにちは。

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

using ……
using ……

Public class Lesson1 : Mono…… {

    void Start () {
        // ↓ "Person p" これはPersonクラス(型)のpという変数、という意味です。
        Person p = new Person();        // ← これはコンストラクタという特別な関数を呼んでいます
        p.firstname = "山田";           // ← これはPersonクラスのfirstname変数に値を代入しています
        p.lasttname = "太郎";           // ← これはPersonクラスのlasttname変数に値を代入しています
        Debug.Log(p.GetFullName());     // ← これはGetFullName関数を呼んで、その結果を引数としてLog関数を呼んでいます
    }
}

//…中略…

class Person {
    public string firstname;    // ← これはPersonクラスのメンバー変数です。
    public string lastname;     // ← これはPersonクラスのメンバー変数です。

    // ↓ 例では省略されていますが、これがコンストラクタです。
    //      コンストラクタはクラスを初期化するための特別な関数です。
    public Person(){        // ← これは関数です。
        return;
    }

    public string GetFullName () {      // ← これは関数です
        // ↓ lastname変数の値とfirstname変数の値をくっつけています。
        return this.lastname + this.firstname;
    }
}

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

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

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

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

参考になれば幸いです。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/06/14 20:31

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

    キャンセル

  • 2018/06/15 09:34

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

    キャンセル

+2

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

Person p = new Person ();

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

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+1

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


Person p = new Person (); 

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

Debug.Log (p.GetFullName ()); 

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

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

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

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


Person p = new Person ();

とあるのは、

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

int a = 100;

みたいなもの。

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

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

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

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

なのでエラーが出ます。

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 90.51%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • C#

    7385questions

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