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

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

ただいまの
回答率

91.05%

  • C#

    5526questions

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

  • Unity

    2795questions

    Unityは、ユニティテクノロジーが開発したゲームエンジンです。 主にモバイルやブラウザ向けのゲーム製作に利用されていましたが、3Dの重力付きゲームが簡単に作成できることから需要が増え、現在はマルチプラットフォームに対応しています。 言語はC言語/C++で書かれていますが、C#、JavaScript、Booで書かれたコードにも対応しています。

初期値がのっているドキュメントURLを教えてください。

解決済

回答 2

投稿

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

tkmnusr

score 113

 前提・実現したいこと

配列をnewしたときに要素に値を代入しないと、要素に初期値(初期化子というのですか?)が入っているみたいですが、
これの各型の初期値掲載されているC#かUnityの公式ドキュメントを見たいです。
検索しても意外と見つからなく、私の指定している検索ワードが悪いみたいです。
公式ドキュメントのURLを教えていただけないでしょうか?
また、初期化子とは初期値と同じ意味ですか?
また、クラスの初期値はnullですか?

 該当のソースコード

    int[] arr = new int[2];
    arr [1] = 10;
    Debug.Log (arr [0]);  //0 ←これを初期化子というのでしょうか?
    Debug.Log (arr [1]);  //10

 試したこと

検索したワード。
・C# 配列 初期値
・C# 配列 初期化子
・C# 初期化子

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 2

checkベストアンサー

+2

いろいろ情報があって混乱しておられるようなので、一行づつ説明しますね。

配列をnewしたときに要素に値を代入しないと、要素に初期値(初期化子というのですか?)が入っているみたいですが、

必ずしも要素に初期値が入っているとは限りません。
サンプルコードではint型の配列として宣言しているため、int型の初期値(すなわち0)で初期化された配列が準備されるだけです。

これの各型の初期値掲載されているC#かUnityの公式ドキュメントを見たいです。

https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/keywords/default-values-table
値型であれば上記URL、参照型であればnullだと思えばOKです。
default句を使う必要が出てきたときに更に勉強を進めると良いでしょう。
※LinqでFirstOrDefaultを使い始めたときですね。

また、初期化子とは初期値と同じ意味ですか?

違います。
初期化子とは、要素の宣言と同時に値をセットすることです。
https://docs.microsoft.com/ja-jp/dotnet/csharp/programming-guide/classes-and-structs/object-and-collection-initializers
初期値とは、上の上のURLで示したとおり何も値を設定しないでインスタンス化した変数に入っている値ですね。
(値型の要素をインスタンス化するって言葉が正しいかちょっと自信ないですが)

また、クラスの初期値はnullですか?

クラスは設計図なので初期値も何も無いと思いますが…
MyClass myClass;
こう書いてあれば当然myClassはNULLです。

以下の様にnewしてあれば当然新しいインスタンスが作られてNULLではなくなります。
var myInstance = new MyClass();
そしてMyClassの中に定義してある諸々のメンバ・プロパティは、それぞれの型ごとの初期値を持ちます。
(もちろんコンストラクタや初期化子で値をセットしてあれば、その値がセットされた状態のインスタンスとなります)

Debug.Log (arr [0]);  //0 ←これを初期化子というのでしょうか?

違います。
サンプルコードを例にするなら以下のとおりです。

    //これは単純に要素数2つのint型の配列をarrとして宣言しただけ。
    //配列の中のそれぞれの初期値は、何も設定されていないので0。
    int[] arr = new int[2];
    //こっちの波括弧の部分が初期化子。
    //int型の要素2つを持ち、0番目が「2」、1番目が「3」を持つ配列を宣言した。
    var arr2 = new int[2] { 2, 3 };

回答被っちゃったようですが、途中まで書いたのでコメントしますw

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2018/04/01 17:01

    ご回答ありがとうございます。
    ご丁寧なご解説ありがとうございました。
    理解できました。

    キャンセル

+1

初期化子とは、配列やオブジェクトを生成する際に初期値を渡し初期化することです。
(配列は初期値、オブジェクトはアクセス可能なフィールドかプロパティを初期化可能なはずです。)

int[] arr = new int[2];
arr [1] = 10;

//上記と同じ意味です。({}が初期化子)
int[] arr2 = new int[2]{0, 10};

//さらに省略することもできます。(Unityを使用されているのであれば var(推論型)も使用可能だと思います。)
var arr3 = new int[]{0, 10};

また、C#の値型配列の初期値は下記です。
クラスはnullになります。

既定値の一覧表 (C# リファレンス)

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2018/04/01 17:01

    ご回答ありがとうございます。
    理解できました。

    キャンセル

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

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

関連した質問

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

  • C#

    5526questions

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

  • Unity

    2795questions

    Unityは、ユニティテクノロジーが開発したゲームエンジンです。 主にモバイルやブラウザ向けのゲーム製作に利用されていましたが、3Dの重力付きゲームが簡単に作成できることから需要が増え、現在はマルチプラットフォームに対応しています。 言語はC言語/C++で書かれていますが、C#、JavaScript、Booで書かれたコードにも対応しています。