skillup

技術ブログ

プログラミング全般

制御フローについて

投稿日:

リーダブルコード 7章。制御フロー(if文などの条件分岐)について

ここらへんは個人個人癖がついているとおもいますが、確かに読みやすい、読みにくいというのはあるのでなるべく汎用性のある規則を身につけたいと思います。

条件式の並び方

具体的に読みやすいコードと読みにくいコードを列挙して見ます。

一般的に条件式では

左 変化する値。比較する側の値

右 あまり変化しない値。比較される側の値

の形が一番自然のようです。おそらく人間の頭の構造がそうなっているんでしょうね。・・

ifelseの並び方

  1. 条件は否定より肯定系を使う。if(!debug)よりはif(debug)にする
  2. 単純な条件を先に書く
  3. 関心を引く条件や目立つ条件を先に書く

1は納得。例外としては否定形のほうが一般的なパターンですかね。

例えばPHPの空白条件なんかは下記のようなときに使われることのほうがおおいでしょう。

2,3は確かに衝突することのほうが多いかも。要は頭を疲れさせない並び方にするのがポイントってことでしょうか。

三項演算子

自分が初期のころそうだったんですが行数を短くすることにこだわりすぎてて、無理やり三項演算子を使ってました。コードを読みやすくするのが目的なので意味なく使うと当然読みにくくなります。

三項演算子が一番有効なのは変数が空かどうかをチェックする(あるいはそれに近い)パターンでしょう。短くすることが自己目的化して使いすぎないほうがいいですね。

do while ,go toを使わない

あまり推奨される記述方法ではないようです。自分は元々ほとんど使ってません。

関数は結果を早く返す

ポイントとしては例外的な条件だったり、いらない条件をなるべく早めに除外してしまおうということですね。

これらを同一のif文の中に入れておくとネストが複数になり、複雑になって読みにくくなるからでしょう。

ネストを浅くする

基本ですね。一般的には2段ぐらいが上限かと思います。それ以外は見にくくなるのでメソッド化するか他の手法を考えましょう。

全体を通してポイントとしては流れがおいやすいか、頭に負担をかけないかといったことでしょうね。7割ぐらいは実行できているかな・・・

-プログラミング全般
-

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

no image

画面の制御フローなど

複雑な帳票系アプリではよくあると思うのですが、ある入力値が複数の場所から影響を受けており、制御がなかなか難しいときなどがあります。 例として クリアボタンなどでクリアされる 他のプルダウンなどで影響を …

no image

webの仕組み その2 リクエストとレスポンス

クライアント(ブラウザ)はサーバーとの接続を確立した後、各種リクエストを送信します。サーバーはそれにこたえテキストや画像などのリソースをクライアントに転送します(これがレスポンスです。) Firefo …

no image

コレクションの頻出処理に関して

PHPでコレクションを使っていますが、慣れると本当に便利ですね・・・まあforeachとかでグリグリやってもいいのですが、無駄にコードが長くなります。 自分がコレクションでよく使う再頻出のメソッドなど …

no image

ログの設計指針について

今まで10以上近い現場で仕事をしてきましたが、どの現場でも絶対必要になる(かつどこもあまり対策が取られていない)技術としては 検証したい状態の復元がすぐにできる(テストデータ作成) ログの適切な設計 …

no image

ExcelVBAに関して(主にプロシージャ)

いつも半年ごとぐらいに触っていてあまり知識が蓄積しないので(汗)これを機につまづいたところをちょっとメモ。 Contents1 基本2 メモ3 参考リンク 基本 基本的な変数の代入や条件分岐、ループな …