If

if.png

基本

if old > 10 and old < 30:
  print "年齢は10歳から30歳まで"
if sex > man or sex < gay:
  print "gentlemen"
# 否定文
old = 25
if not old < 20:
  print "old is not under 20"

読みやすい書き方

  • 否定形よりも肯定形
  • 単純な条件を先に書く
  • 関心を引く条件や目立つ条件を先に書く
  • 長くなってきたら、()で囲むよりもバラバラにする

どっちの変数を右(or左)にするか

左側 右側
「調査対象」の式、変化する 「比較対象」の式。あまり変化しない
if(data>threshold){}//ok

if()の中が長くなってきたら

対策1.()で囲むよりもバラバラにする

ド・モルガンの法則マスターしちゃってる俺かっこいいーー
ま、頭の良いやつにしかこのif文の条件はわからないけどな!
なんて、かっこつけてないで、読みやすい方を優先しましょう。
誰も無駄に考える時間は欲しくありません。

悪い例 良い例
if(!(file_exists && !is_protected)) printf("ファイルが読めません");
if(!file_exists || is_protected)) printf("ファイルが読めません");

対策2.説明変数を加える

悪い例 良い例
if line.split(':')[0].strip() == "root":

lineという文字列を「:」で分割して、左側の方([0])をstrip()(余計な空白を削除)した文章が、「root」と一致するか判断。
username = line.split(':')[0].strip()
if username == "root":

lineという文字列を「:」で分割して、左側の方([0])をstrip()(余計な空白を削除)した文字列はusernameを意味してたんだ!ってわかるね。

if()のカッコの中で変数を宣言する…変数のスコープを縮めるために使う

よく書くのはこうだが

double d=prim(true);
if(d){
    left/=d;
    break;
}

これだと変数のスコープが無駄に伸びてよくないらしい。
こっちがおすすめ
if(double d=prim(true)){//dの宣言の位置
    left/=d;
    break;
}else{
   printf("%f\n",d);//まだdは使える!
}

このように書いた時、dのスコープは宣言の位置から条件部が制御している文の末尾までである。
たとえば、if-statementにelse部があれば、dは両方のブロックにスコープを持つことになる。
この他にも、ソースコードがコンパクトになるというメリットがある。
これ関連のエラーを防ぐ記法をヨーダ記法とよぶらしい[1]
しかし、ヨーダ記法で書くと、読みにくくあるので、今風じゃない。

ifよりも3項演算子にすべきとき

大体はif~else文の方がいいけど、例外もある

  • 単純な2つの値から1つを選ぶ場合

こんな場合は3項演算子のほうがいい

time_str+=(hour>=12)? "pm" : "am";

ifの場合
if(hour>=12){
  time_str+="pm";
}else{
  time_str+="am";
}

深いネストを避けるには?

continuebreakreturnでif文から脱出する

条件が複雑になってきたら、

説明変数を用意すると読みやすくなる。[1]

Bibliography
1. リーダブルコード…..元グーグル社員の書いた本。読みやすいコードを書くために気を付けたらよいことがわかりやすくまとめてあります。

python-basic

サポートサイト Wikidot.com python-basic