なにこれ?
複数の言語を学習してみると、書き方はともあれ、
どの言語にも制御構文とか変数宣言とか算術演算とか、
文法の共通概念というものがあることがわかる。
ということはこれから新しい言語を学ぶ際に、
その共通概念が、学習する言語でどう書くのかをマッピングしていけば、
従来より簡単に基本文法が習得できるのではないかと思って作ってみた。
なににつかうの?
- ○○言語基本文法チートシートの雛形
- 新しい言語を学習するときの、指針
- 多数の言語を使い分けなきゃいけない人の備忘録
チートシートのチートシート
文法名 | 詳細 | 書き方 | サンプル |
コメント | 一行コメント | ||
複数行コメント | |||
コンソール出力 | 改行あり | ||
改行無し | |||
データ型 | 文字列(String) | ||
整数(Int) | |||
小数(float) | |||
論理(bool) | |||
日付(date) | |||
変数 | 定数宣言(変更不可) | ||
変数宣言(変更可) | |||
変数宣言(型推論) | |||
代入 | |||
キャスト(型変換) | |||
配列 | 宣言 | ||
初期化 | |||
代入 | |||
サイズ変更 | |||
値コピー | |||
リスト | 宣言 | ||
代入 | |||
要素追加 | |||
連想配列(ディクショナリ) | 宣言 | ||
代入 | |||
要素追加 | |||
算術演算 | 和(足し算) | ||
差(引き算) | |||
乗(かけ算) | |||
除(割り算) | |||
商(割り算の商) | |||
余(割り算の余り) | |||
べき乗 | |||
整数操作 | インクリメント | ||
デクリメント | |||
文字列操作 | 結合 | ||
長さ | |||
切り出し | |||
検索 | |||
配列に分割 | |||
制御構文(選択) | IF文 | ||
Switch文/Case文 | |||
制御構文(ループ) | カウント制御ループ(For) | ||
条件制御ループ(while) | |||
コレクション制御ループ(each) | |||
ループスキップ(continue/skip) | |||
ループ再実行 | |||
ループからの早期脱出(break) | |||
例外処理 | try catch | ||
finnaly | |||
usingブロック/try-with-resources | |||
関数(メソッド)宣言 | 戻り値あり | ||
戻り値なし | |||
クラス | 宣言 | ||
継承 | |||
初期化(インスタンス化) | |||
コードブロック | クラスブロック | ||
関数ブロック | |||
IFブロック | |||
ループブロック | |||
例外処理ブロック | |||
ライブラリ/モジュール関連 | ライブラリ/モジュールの追加 | ||
名前空間(パッケージ)の参照追加 |
チートシートを使って作ったC#基本文法チートシート
文法名 | 詳細 | 書き方 | サンプル |
コメント | 一行コメント | 先頭を スラッシュ2文字 | // 行末まで全部コメント |
複数行コメント | /* */ で囲う | /* この中だけコメント */ | |
コンソール出力 | 改行あり | Console.WriteLine | Console.WriteLine("Hello World"); |
改行無し | Console.Write | Console.Write("Hello World"); | |
データ型 | 文字列(String) | string | string str = "aaa"; |
整数(Int) | int | int num = 10; | |
小数(float) | float,double,decimal | decimal tax = 10.8; | |
論理(bool) | bool | bool flag = true; | |
日付(date) | DateTime | DateTime today = DateTime.Today; | |
変数 | 定数宣言(変更不可) | const + データ型 + 名前 | const int x = 0; |
変数宣言(変更可) | データ型 + 名前 | int x = 0; | |
変数宣言(型推論) | var + 名前 = なんらか; | var x = 0; | |
代入 | 変数名 = 値 | x = 0; | |
キャスト(型変換) | (型名)変数名 または 文字列なら型によっては、型名.Parseが使える |
long longNum = 100.2; int intNum = (int)longNum; または、 string numString = "100"; int intNum = int.Parse(numString); |
|
配列 | 宣言 | 型[] 変数名 = new 型[要素数] | string[] strArray = new string[3]; |
初期化 | Json風 | string[] strArray = {"a", "b", "c"}; または string[] strArray = new string[]{"a","b","c"}; |
|
代入 | 名前[配列番号] = 値 | string[0] = "hoge"; | |
サイズ変更 | Array.Resize(ref 変数, 要素数) | Array.Resize(strArray, 10); | |
値コピー | Array.Copy(元変数, 先変数, 要素数) | Array.Copy(src, dest, 10); | |
リスト | 宣言 | new List<型>() using System.Linq; using System.Collections.Generic; が必要 |
var list = new List<string>(); |
代入 | 変数名[要素番号] = 値 | list[0] = "hoge"; | |
要素追加 | 変数名.add(値) | list.add("hoge"); | |
連想配列(ディクショナリ) | 宣言 | new Dictionary<型,型>() | var dic = new Dictionary<string,string>(); |
代入 | 変数名[キー名] = 値 | dic["key"] = "value"; | |
要素追加 | 変数名.add(キー名, 値) ※キーがなければ代入方式でも追加される |
dic.add("key", "value"); | |
算術演算 | 和(足し算) | + | 1 + 2 |
差(引き算) | - | 1 - 2 | |
乗(かけ算) | * | 1 * 2 | |
除(割り算) | / ただし、割り切れない場合は、どちらか小数変換しないと、小数点が切り捨てになる | (decimal)1 / 2; // 0.5 | |
商(割り算の商) | / | 5 / 2; // 2 | |
余(割り算の余り) | % | 5 % 2; // 1 | |
べき乗 | Math.Pow() | Math.Pow(3,2); // 3の2乗 | |
整数操作 | インクリメント | ++ | num ++ |
デクリメント | -- | num -- | |
文字列操作 | 結合 | + | str1 + str2; |
長さ | 文字列.Length | str1.Length | |
切り出し | 文字列.Substring | "あいうえお".Substring(1,3); // "いうえ" | |
検索 | 文字列.IndexOf | "あいうえお".IndexOf("い"); // 1 | |
配列に分割 | 文字列.Split | "10,2,3".Split(","); | |
制御構文(選択) | IF文 | if (条件) {} else if {} else { } | if ( a == 0) { } else if ( a == 1) { } else { } |
Switch文/Case文 | switch(変数) { case 値1: 処理 break; case 値2: 処理 break; default: 処理 break; } |
switch(num) { case 1: Console.WriteLine(num); break; case 10: Console.WriteLine(num); break; default: Console.WriteLine(num); break; } |
|
制御構文(ループ) | カウント制御ループ(For) | for(int i = 0; i < 10; i ++) { } | for(int i = 0; i < 10; i ++) { Console.WriteLine(i); } |
条件制御ループ(while) | while(条件式){} | var num = 0; while(num < 0) { num ++; } |
|
コレクション制御ループ(each) | foreach(変数宣言 in 配列名) { } | var strArray[] = {"a","b","c"}; foreach(string str in strArray) { Console.WriteLine(str); } |
|
ループスキップ(continue/skip) | continue | for (int i = 0; i < 10; i++) { if (i % 2 == 0) { continue; } } |
|
ループ再実行 | ない | ||
ループからの早期脱出(break) | break | for (int i = 0; i < 10; i++) { if (i % 2 == 0) { break; } } |
|
例外処理 | try catch | try { } catch(exception) { } |
try { } catch (Exception) { Console.WriteLine("Error!!"); } |
finnaly | try { } catch(exception) { } finnlay{ } |
try { } catch (Exception) { Console.WriteLine("Error!!"); } finally { } |
|
usingブロック/try-with-resources | using(idsposable変数インスタンス化) { } |
using (FileStream fs = new FileStream("test.txt", FileMode.Read)) { } |
|
関数(メソッド)宣言 | 戻り値あり | 戻り値データ型 関数名(データ型名 引数名) { return xxx; } |
int Add(int a, int b) { return a + b; } |
戻り値なし | void 関数名(データ型名 引数名) { } |
void ShowMessage(String Message) { Console.WriteLine(Message); } |
|
クラス | 宣言 | class クラス名 { } |
class human { private String name; public void SetName(String inputName) { name = inputName; } } |
継承 | class 派生クラス名 : 基底クラス名 { 派生クラスの定義 } |
class Adult : human { private int Age; } |
|
初期化(インスタンス化) | var 変数名 = クラス名() | var JohnDoe = new Adult(); | |
コードブロック | クラスブロック | 中括弧 | cass hoge { } |
関数ブロック | 中括弧 | void hoge() { } |
|
IFブロック | 中括弧 | if ( a == 0) { } |
|
ループブロック | 中括弧 | for(int i = 0; i < 10; i ++) { Console.WriteLine(i); } |
|
例外処理ブロック | 中括弧 | try { } catch (Exception) { Console.WriteLine("Error!!"); } |
|
ライブラリ/モジュール関連 | ライブラリ/モジュールの追加 | VisualStudioのソリューション エクスプローラーで、[参照] ノードを右クリックし、[参照の追加] を選び、モジュールを指定してOKボタン。 実体は、csprojファイルのItemGroup>Referenceノード内に追加 |
-- |
名前空間(パッケージ)の参照追加 | ファイル先頭で、 using 名前空間; |
using System.Text; |
結論
なんかいけそう。(小並感)