# ゆるふわ読書会 第三回 課題図書 --- - [リーダブルコード](https://www.amazon.co.jp/dp/4873115655) @jupipi --- - 7章 - if(調査対象の式{あまり変化しない} > 比較対象の式{変化する式}) - if/else文の書き方 条件は否定形より肯定系を使う - 関心を引く条件や目立つ条件を先に書く - 三項演算子は割と出てくることが多い(特にフロントエンド側の処理のさいが多い) - do/while文はあまり出てこない?ような気がする - if (条件)return文ですぐにreturnする文を書くことは多い - gotoなんて見たことナッシング - 構成要素がよくわからん(スレッド、シグナル/割り込みハンドラ、例外、関数ポインタと無名関数、仮想メソッド - 8章 - 個人的にはこの章の考え方は一番身に付けたい(普段の課題を分割する方法にも通じる思考のような気がする) - 説明変数はわかりやすい名前をつける - 優雅な手法を見つけるは発想を逆転して終点から始まるという発想はなかった - 巨大な文を分割する時に要約変数として関数の最上部にまとめる - 9章   - 変数のスコープは縮めた方が良い(メソッドをできるだけstaticにする)   - 大きなクラスを小さなクラスに分割する   - submmittedはよくわらかん   - 8章の要約変数と定義の位置を下げるは同じ意味では?どゆこと? @gkzz --- - 7章 - if文における左辺と右辺に書くこと - 数学でも左辺に変数、右辺に変数に代入されるものを書くからしっくりきた - 複数の条件が連なるときに最初に書く条件 - 単純なものは同意。 - 関心を引くものは実装社の主観によるところが多い感がしてなんとも。 - 否定形と肯定系については、条件式に続くケースがシンプルなものを書くようにしている。 - if-else文の条件が視界に入るように。 - ネストの深さの対処法として早くreturnするというのはコーディングレビューで学んだ - ネストの深さとif-eleeの条件式の順番の決め方はトレードオフにも。 - 8章 - ド・モルガンの法則。 - boolean値のようなものを定義して、boolean値がカラ、Falseであるかみたいな書きっぷりはすることがある。 - 第三者でも分かる命名規則として、is_activeが思いついたけど、もう少し具体的にするとしたらなんだろう? - xxx_found,xxxFoundとか? - 9章 - 最後のwhile -> for-loopを使っての改善事例 - 抽象化して法則、フレームワークとして落とし込むとしたらどうすればよいのだろう。 - 本書で記載されているように、「変数を減らすこと」くらい? @aitsuba --- - 7章 - 条件式の引数の並び順 - Javaはequalsで比較する場合があるため、 - - if(HOGE.equals(hogehoge)){ ... } - - の場合左に変化しない値を書くことを強制される。(ヌルポを防ぐため) - ヨーダ記法は完全非推奨 - 引数名自体に意味をもたせるべき - if/else ブロックの並び順 - 「!」は個人的に見づらいので嫌いです。 - 三項演算子 - 一行で書きたいときによく使う(HTMLのインラインで書きたいときとか) - do/while ループは避ける - モダンな言語ではループしなくていいようなライブラリが追加されたりしてる印象 - (JavaのStreamAPIなど) - 基本的にループが必要な処理はコレクションに対しての操作に使うので他の方法があればそっちを使う - 関数から早く返す - 関数内で変数を作ってそれをreturnで返す書き方をする人がよくいるが、やめたほうがいいと思う - returnで都度値を返したほうが戻り値がなにかわかりやすくなる。 - 悪名高き goto - 使ったことない - ネストを浅くする - ネストの深さは闇の深さ - 設計書の条件をそのままコードに落とすと深くなりがち - モジュールごとに分割することが重要 - returnを使う - まとめ - 複雑になりそうなら別の方法を考える - 8章 - 説明変数 - 要約変数 - 名前は知らなかったけどこれもよく使う - 条件判定結果自体を変数に入れて使い回す書き方は結構好きで、 - if文の引数内が複雑になるだけでバグが頻発するのでシンプルにするためにも重要 - 三項演算子が使いやすくなる - ド・モルガンの法則を使う - よくわからなかったので誰か教えて(´・ω・`) - まとめ - ちゃんとモジュールに分割しなさいということだと思った - 9章 - JavaScriptのグローバルスコープ - 情報が古い - varによる変数定義は非推奨となっており、 - strictモードによって変数定義をしないとエラーとなるようにできる - let constを使うことでブロックスコープを生成することができる。