はじめに
C#からプログラミングを始めたプログラミング初心者に向けたTips集になります。
コードを眺めている際に、突然出てきても検索しづらいものなどを中心に書きました。
全てのシーンでこの方法を使うことを推奨しているわけではありません。
ただし、知らないよりも知っている方がいい知識です。
三項演算子
A == B と、それ以外で設定する値を分ける
string msg;
if(x == 1) {
msg = "hello";
} else {
msg = "bye";
}
この書き方は冗長な書き方なので、三項演算子を使って以下の書き方で書けます。
string msg = x == 1 ? "hello" : "bye";
この三項演算子は、(条件式) ? (Trueの場合の設定値) : (Falseの場合の設定値)
となります。
条件や設定値が複雑でない場合は、この書き方がおすすめです。
逆に条件、設定値が複雑だと見にくくなるので、一度条件や設定値を変数にセットしましょう。
Null合体演算子
A がNullの場合は特定の値をセットする
string msg;
if(x == null) {
msg = "bye";
} else {
msg = x;
}
このケースの場合も以下のように書き換えることができます。
string msg = x ?? "bye";
この三項演算子は、(設定値) ?? (左記の設定値がNull場合の設定値)
となります。
この書き方はNullなら初期値はこうしたい、などのケースで利用されます。
変数の型宣言 var
たとえば以下のケース。
string msg = "hello";
List<string> list = new List<string>();
型がわかっていれば、変数の型定義はvar
に置き換えられます。
var msg = "hello";
var list = new List<string>();
右辺の型が明らかな場合は、なるべくvar
を利用することが
最近のトレンドかつ、MSDNでも推奨となっています。
MSDN
ちなみに、var
は暗黙の型指定です。
宣言時に右辺で型が特定できないといけません。
以下のような書き方はコンパイルエラーになります。
var msg;
var list = null;
ラムダ式
メソッドの引数に(x => x == 1)
のような引数を見たことがありませんか?
これはラムダ式と呼ばれ、関数を簡易化して書いてあります。
こんな感じです。
var dataList = new List<string>() {"a", "b", "c", "d", "e"};
var result = dataList.Any(data => data == "b");
/// result = true
上記式は、dataList
の中にb
が存在するかをチェックする関数です。
Any()
の内部がラムダ式になっています。
Anyの引数は関数を引数とすることになっており(型はFunc<T, bool>
)、上記式は省略形になります。
T
はジェネリクスといい、Listの型がstringのため、stringが引数の型となります。
上記式は以下の書き方と同じです。
var dataList = new List<string>() {"a", "b", "c", "d", "e"};
var result = dataList.Any((string data) => { return data == "b"; });
これなら関数っぽさが出たのではないでしょうか?
string data
は引数となっており、リストのデータ1件ずつが渡されます。
そのデータにb
が存在するかを1件ずつチェックしており、b
が存在すればtrue
を返却することになっています。
上記式を省略するとdata => data == "b"
となるわけです。
最後に
名前を知らないと検索が難しそうなものを選ぼうと思っていましたが、var
は検索しにくくなかったですね。
プログラミングを始めた頃は自分も使おうとしなかったものを挙げてみました。