if文の条件式 読み手にも優しく
こんにちは、最近8:00と8:20にアラームを設定して脅威の2段構えを取ってるのに寝坊してるえくれあです。
3段構えの方が良いのだろうか。。。
さて、今回はかなりレアなプログラミング~的な感じの記事です。
お題目はif文の条件式について思うところをちらほら書いていこうと思います。
さて、まずは下のコードを見てみてください。言語はC#です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
using System; namespace myApp { class Program { static void Main(string[] args) { bool isMagic = true; // 魔法使えるかどうか string useWeapon = "杖"; // 装備は杖 int maxMp = 100; // 最大MPは100 // 魔法が使えて if(isMagic){ // 使える装備が杖で if(useWeapon == "杖"){ // 最大MPが0以上であれば if(maxMp > 0){ Console.WriteLine("私は魔法使い"); } } }else{ Console.WriteLine("私は魔法使いじゃないです"); } } } } |
ざっと簡単に書きました。
内容はただ単に魔法使いかどうか書いてるだけです。
さて、上記のコードがあったとしてちょっと嫌な部分がありますよね。
ネストが深い!
if文の中にif文があって更にif文があるという。。。
これ書いた人は良いかもしれませんが、読む人によっては辛いですよね。
簡単なサンプルなのでこれは問題ないと思いますが、読むのが難解なコードだってあります。
なのでまずはネストが深いのを直していきます。
■目次だよ~(^^
ネストが深いので修正していきましょう
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
using System; namespace myApp { class Program { static void Main(string[] args) { bool isMagic = true; // 魔法使えるかどうか string useWeapon = "杖"; // 装備は杖 int maxMp = 100; // 最大MPは100 // 魔法が使えるかどうか、装備は杖なのか、最大MPは100以上なのか if(isMagic && useWeapon == "杖" && maxMp > 0){ Console.WriteLine("私は魔法使い"); }else{ Console.WriteLine("私は魔法使いじゃないです"); } } } } |
今回は && を使ってif文を消しました。
さっきよりかは行数も減り読みやすくなったと思います。
これぐらい簡単なサンプルであればもう良いような気がしますが、もっとたくさんの条件式があるようなものがあるかもしれません。
なので更に改良していきます。
条件式が長いとうっとおしいので関数にして外に出します。
if文では魔法使えるのかどうか~とか装備が杖なのかどうか~とかなのですが、まとめちゃうと
魔法使いなのかどうか?っていう事ですよね。
なので魔法使いなのかどうかっていう関数を作ります。
条件式を関数に
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
using System; using System.Linq; namespace myApp { class Program { static void Main(string[] args) { bool isMagic = true; // 魔法使えるかどうか string useWeapon = "杖"; // 装備は杖 int maxMp = 100; // 最大MPは100 Func<bool,string,int,bool> isWitch = (bool magic , string weapon , int mp ) => magic && weapon == "杖" && mp > 0; // 魔法使いかどうか if(isWitch(isMagic,useWeapon,maxMp)){ Console.WriteLine("私は魔法使い"); }else{ Console.WriteLine("私は魔法使いじゃないです"); } } } } |
長ったらしい条件式をisWitchという魔法使いかどうか調べる関数に置き換えました。
更にスッキリしたのではないかと思います。
今まででしたら、魔法が使えて、武器が杖で、最大MPが0以上で~、なるほどこれが魔法使いなのか!
と何行もあり読むのがめんどくさかったですがisWitchにしたので魔法使いかどうかの確認関数があってこれが魔法使いなのか!
1行でばっちり分かります。
だからなんだよ、って思う人多いかもしれません。
でもプログラムは読む人にとって分かりやすく作るべきなのでこういう気づかいってとても大事なのですよね。
1行か数行の違いですが、こういうのが何個もあるとソースコードの把握に時間がかかります。読む気も失せますw
逆に読み手に優しいプログラムは人間関係も良くなる(←これが一番重要な気がする)ので良いことだらけです。
何故こういう事書こうと思ったのは今いるプロジェクトのコード読んだらこういうのが多すぎてまじふざk…..おっと誰か来たようだ。
それでは皆さんの良きプログラマーライフを祈って
でわでわ~ノシ
よければtwitterフォローお願いします!
Follow @えくれあ
コメントを残す