こんちゃ洋梨🍐です。みなさんプログラミングするとき何を意識しますか?可読性?書きやすさ?コードの短さ?動作の速さ?
同じ言語でも沢山ある書き方ですが、みなさんはどのように書きますか?
コンソールに配列のデーターを表示する例 (C#)
var data = new string[] { “A”, “B”, “C” };
といったデータがあるとします。これをコンソールに
このように表示する方法としてどんな書き方があるか考えていこうと思います。
初心者あるある(ない)
Console.WriteLine(data[0]);
Console.WriteLine(data[1]);
Console.WriteLine(data[2]);
これは色々すごい👼
普通に
for (int i = 0; i < data.Length; i++)
Console.WriteLine(data[i]);
普通です。面白くないです。でも普通です。
普通に?
int n = 0;
while (n < data.Length){
Console.WriteLine(data[n]);
n++;
}
なぜこうした?とはなるけど普通っていえば普通
ちょっと慣れた人
foreach (var s in data)
Console.WriteLine(s);
シンプルで見やすくて◎なんじゃないでしょうか?
むしろこれより良い書き方あるなら教えてください。
見やすさ求めて見にくくなった人
new List<string>(data).ForEach((s) => Console.WriteLine(s));
一行でかけてて◎だけど無理やりLINQ使ってる感が否めません。
もはや何がしたいかわからない人
new Action(() =>{
int n = 0;
while (n < data.Length)
{
Console.WriteLine(data[n]);
n++;
}
}).Invoke();
こんなのに何故Actionデリゲート使った?ってなるし意味不明。動くけど。
もはや何がしたいかわからない人2
var act = new Action<int>((i) => Console.WriteLine(data[i]));
for (int i = 0; i < data.Length; i++) act(i);
これこそなぜわざわざActionデリゲート使った?となる意味不明なコード
デリゲート使いたかったんだなぁとはなる。
迷走した人
Action<int> a = null;
a = new Action<int>((v) => {
Console.WriteLine(data[v]);
if (v < data.Length - 1) a(v + 1);
});
a.Invoke(0);
nullを仮に入れとかないとビルドできない時点で書き方に色々問題のあるコード。JavaScriptのクロージャみたい
意味不明な人
int x = 0;
while (new Func<bool>(() => {
Console.WriteLine(data[x]);
x++;
if (data.Length > x) return true;
else return false;
}).Invoke()) ;
可読性とかとうに忘れたような書き方。そもそも初心者は理解できないのでは?意味不明な書き方。動くけど。
やりたいことはわかるコード
Console.WriteLine(new Func<string>(() => {
string str = "";
for (int i = 0; i < data.Length; i++)
if (i + 1 == data.Length) str += data[i];
else str += data[i] + "\n";
return str;
}).Invoke());
表示させたい文字列を作ってからConsole.WriteLineに渡したんだなぁってことはわかるコード
まとめ
プログラミングは色々な書き方があるので時と場合で使い分けれるといいですね!
今回のパターンではforeachしか使いませんが笑
またほかのパターンもやってみたいと思います😎
他にもこんな書き方あるだろって方は是非教えてください👼
ここまで読んでくれてありがとうございました!!
ホームページでは他にも
・様々な記事や作った作品および過程
・ソースコード、素材ファイル
・あらゆる”モノ”の作り方
などなど随時、記事や作品を新規公開・更新していますので是非見ていってくださいね!見ていただけると本当に嬉しいです!