if/unless|TechRacho(テックラッチョ)〜エンジニアの「?」を「!」に〜|BPS株式会社エンジニアの「?」を「!」に。if/unlesshachi8833&シェアツイートブックマークLINEこんにちは、hachi8833です。「Rubyスタイルガイドを読む」シリーズ、文法(1)の続きです。underscore.アンダースコア_変数を多重代入の末尾に置くことは、左辺でsplat演算子*で始まる変数が定義されていて、かつそのsplat付き変数がアンダースコア単体でない場合に認められます。foo.split(',')Rubyでは、宣言だけ行って使わない変数があると、-wオプション付きで実行したときに警告が表示されます。以下については、-wオプションがある場合でも警告は表示されなくなります。2.0以降で有効)これらは、代入された値をその後使う予定がない場合にプレースホルダとして使えます。本スタイルガイドでは、コンテキストがRubyの多重代入では、左辺の末尾に単独アンダースコア変数_を置くことを推奨していません。コンテキストを明確にするために、名前付きアンダースコア変数(_secondのようにアンダースコア_で始まる識別子)の利用が推奨されます。確かに、値を捨てるにしてもどんな値を捨てたのかを名前付きアンダースコア変数で示す方が親切だと思えます。アンダースコア_そのものは識別子としては小文字と同等なので、形式上はアンダースコア単体またはアンダースコア変数を通常の変数として使い回せそうに思えますが、スタイルとしてよくないのでやめておく方がよいように思えます。アンダースコア変数を宣言すると変数オブジェクトが生成されてしまいますが、値を使わないという意図を示すためにスタイルとして推奨されていると理解しました。morimorihogeさんによるとRubocopもアンダースコアに対応しているとのことです。言われないように使わない変数にはアンダースコア(_)を使うアンダースコアを変数名に使うことについてsplat付き変数については以下のとおりです。左辺のない余った要素が配列として代入されます。無い時には空の配列が代入されます。it.明確な理由がある場合は除くとありますが、通常はeachなどのイテレーション用メソッドが推奨されます。そもそもforは実際にはeachとして実装されています。forでは(eachと異なり)新しいスコープが導入されないので、forブロック内部の変数がスコープで仕切られずに外側のブロックからアクセスできてしまいます。if/unless.このような場合にthenを書かないのはRubyで広く使われているスタイルです。conditional.条件が次の行にあると見づらいので、これはひと目で納得です。Rubyではifと条件の間が改行されていても動作することを初めて知りました。concise.他に何も書いていませんが、1行で収まるif文を指していると理解しました。endと代入文の形で書くことができますが、このスタイルガイドでは1行で書く場合には推奨していません。三項演算子については常に議論の種になっています。個人的にも、三項演算子はそれが代入であるという意図が伝わりやすいように思えます。cases.三項演算子をネストすると途端に読みづらくなるので、ネストを禁止するスタイルは納得です。コード例では、複数行のifの中での三項演算子は認められていますね。instead.この項は前述の「三項演算子(?:)の利用を推奨する」と内容が重なっているように見えます。xのような簡素な条件であればなおさら三項演算子を使うべき、という意味なのかもしれません。result.確かに、以下の例のようにifの結果をresultに代入することで、resultを1回書くだけで済みます。endmorimorihogeよりこれはRubyの設計思想に関わる部分で地味に大事だったりします。Rubyはすべてのものが式なので、評価して値を返すようにできてるからこういう書き方ができます。rule.;よりthenの方がやや英文らしく見えるからかもしれません。式」の行を指している(ついでにcaseからendまでの長いワンライナーも含む)と理解しました。以下、原文にサンプルがなかったので私が追加してみました。"b"と書けるようになったので、記法の衝突を避けるためだったのかもしれないと推測しています。"b"よりもタイプ量も少なく意味も明確なので、私は大好きです。1..100:などのように範囲にコロンを適用しようとすると動作も意味もあいまいになりそうなので、1.9でこの書き方が廃止されたのは納得です。今回はここまでとします。コボラー、ITコンサル、ローカライズ業界、Rails開発を経てTechRachoの編集・記事作成を担当。チュートリアル第2版の監修および半分程度を翻訳、Railsガイドの初期翻訳ではほぼすべてを翻訳。その後も折に触れて更新翻訳中。enno.jpを運営。実は最近Go言語が好きで、Goで書かれたRubyライクなGoby言語のメンテナーでもある。仕事に関係ないすっとこブログ「あけてくれ」は2000年頃から多少の中断をはさんで継続、現在はnote.muに移転。Storageを使ってはいけない(翻訳)#Tags#会社紹介#自社サービス#勉強会#Rails#PHP#デザイン#実績#週刊RailsウオッチCONTACTお気軽にご相談ください。(翻訳)CONTACTTechRachoでは、パートナーシップをご検討いただける方からのご連絡をお待ちしております。お気軽にご意見・ご相談ください。