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

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

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

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

Unity

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

Q&A

解決済

2回答

203閲覧

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

退会済みユーザー

退会済みユーザー

総合スコア0

C#

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

Unity

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

0グッド

0クリップ

投稿2018/04/01 07:14

前提・実現したいこと

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

該当のソースコード

C#

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

試したこと

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

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

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

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

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

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

guest

回答2

0

ベストアンサー

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

配列を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 ←これを初期化子というのでしょうか?

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

C#

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

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

投稿2018/04/01 07:47

編集2018/04/01 07:49
ShikaTech

総合スコア468

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

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

退会済みユーザー

退会済みユーザー

2018/04/01 08:01

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

0

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

C#

1int[] arr = new int[2]; 2arr [1] = 10; 3 4//上記と同じ意味です。({}が初期化子) 5int[] arr2 = new int[2]{0, 10}; 6 7//さらに省略することもできます。(Unityを使用されているのであれば var(推論型)も使用可能だと思います。) 8var arr3 = new int[]{0, 10};

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

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

投稿2018/04/01 07:29

編集2018/04/01 07:33
RexiA7v

総合スコア112

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

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

退会済みユーザー

退会済みユーザー

2018/04/01 08:01

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問