Rubyスタイルガイドを読む: 数値、文字列、日時(日付・時刻・時間)

こんにちは、hachi8833です。「Rubyスタイルガイドを読む」シリーズもやっと終わりが見えてきました。 まとまりのよさから、今回は「数値、文字列、日付・時間編」といたしました。 Rubyスタイルガイドを読む: 総もくじ 前回: Rubyスタイルガイドを読む: コレクション(Array、Hash、Setなど) 次回: Rubyスタイルガイドを読む(最終回): 正規表現、%リテラル、メタプログラミング Rubyスタイルガイド: 「数値、文字列、日時(日付・時刻・時間)」 参照: bbatsov/ruby-style-guide 数値 8-01【統一】整数値のチェックにはIntegerを使うこと Use Integer check type of an integer number. Since Fixnum is platform-dependent, checking against it will return different results on 32-bit and 64-bit machines. Fixnumの結果はプラットフォームに依存するため、32ビット環境と64ビット環境で結果が同じにならないことがあるためです。 Ruby 2.4の整数はIntegerに一元化されましたが、2.3以前のRubyを使う場合は引き続き注意が必要ですね。 参考: Ruby 2.4でIntegerに一本化される整数 timestamp = Time.now.to_i # 不可 timestamp.is_a? Fixnum timestamp.is_a? Bignum # 良好 timestamp.is_a? Integer 8-02【統一】乱数生成では範囲演算子…の利用が望ましい Prefer to use ranges when generating random numbers instead of integers with offsets, since it clearly states your intentions. Imagine simulating a role of a dice: 以下のサイコロのシミュレーションの例でわかるように、整数値にオフセット値を足すよりも意図が明確になるというのが理由です。 # 不可 rand(6) + 1 # 良好 rand(1..6) 文字列 8-03【統一】文字列の結合は+ではなく、式展開と文字列フォーマットが望ましい Prefer string interpolation and string formatting instead of string concatenation: +で結合するのは一見わかりやすいのですが、「Rubyでの文字列出力に「#+」ではなく式展開「#{}」を使うべき理由」で解説したようにレシーバーによって動作が影響されるので思わぬ地雷を踏むかもしれません。 # 不可 email_with_name = user.name + ‘ <‘ + user.email + ‘>’ # 良好 email_with_name = “#{user.name} <#{user.email}>” # 良好 email_with_name = format(‘%s <%s>’, user.name, user.email) 式展開(interpolation)という訳語はRuby方面でよく使われますが、それにしてもうまい訳ですね。数学方面で「補間」と訳されてしまったせいか補間が使われるのをよく見かけますが、式展開はRubyでの動作に即していて明快だと思います。 参考: TechRacho – Rubyでの文字列出力に「#+」ではなく式展開「#{}」を使うべき理由 今回の内容の多くが、上の記事でも言及されています。 8-04【統一】一重引用符(シングルクォート: ‘)と二重引用符(ダブルクォート: “)の用法をいずれかに統一すること Adopt a consistent string literal quoting style. There are two popular styles in the Ruby community, both of which are considered good—single quotes by default (Option A) and double quotes by default (Option B). Rubyコミュニティでは以下の2つのスタイルが見られますが、それぞれに利点があるので、どちらが正しいとか間違っているということではありません。 プロジェクトで変更点が少ない方を採用するとよいでしょう。 8-04a【選択】(オプションA) … Continue reading Rubyスタイルガイドを読む: 数値、文字列、日時(日付・時刻・時間)