QA@IT
«回答へ戻る

回答を投稿

個人的な好みの範疇ではあると思いますが、私は"折り返さないでほしい"派です。

特にRubyの場合は行末にセミコロンが無いので、私の場合は、ある程度、改行でプログラムの区切りを認識してコードを読むという感じになっています。
プログラムの途中で任意の改行が入っていると、プログラムの意味の固まりが少し分かりづらくなるような気がします。

例で示されているコードだと、3行目の「if html =~ /meta.+charset[ =]+[\"\']?([^>[\"\']]+)/i ||」という部分と、4行目の「html =~ /xml.+encoding[ =]+[\"\']?([^>[\"\']]+)/i」という部分がパッと見、別々のコードのように認識してしまう、誤認してしまうという感じです。
もちろん、ちゃんと読めば「||」の演算子があるので、一つの条件式なのだと理解は出来るのですが、コードの俯瞰性が少し落ちるかな、と思います。

あくまで自分の場合は、ですが、自分が例のコードを書くとしたらこのような感じでしょうか。

def set_encoding(html)
  if html =~ /meta.+charset[ =]+[\"\']?([^>[\"\']]+)/i || html =~ /xml.+encoding[ =]+[\"\']?([^>[\"\']]+)/i
    enc = $1
  else
    enc = Kconv.guess(html).to_s
  end

  # to handle the obsolete charset name, which should've been extinct...
  enc = "Shift_JIS" if enc.downcase == "x-sjis"
  enc = "UTF-8" if !Encoding.name_list.map(&:upcase).include?(enc.upcase)

  html.force_encoding(enc)
  html.encode(
    "UTF-16BE",
    :invalid => :replace,
    :undef => :replace,
    :replace => '.'
  ).encode("UTF-8")
end
個人的な好みの範疇ではあると思いますが、私は"折り返さないでほしい"派です。

特にRubyの場合は行末にセミコロンが無いので、私の場合は、ある程度、改行でプログラムの区切りを認識してコードを読むという感じになっています。
プログラムの途中で任意の改行が入っていると、プログラムの意味の固まりが少し分かりづらくなるような気がします。

例で示されているコードだと、3行目の「if html =~ /meta.+charset[ =]+[\"\']?([^>[\"\']]+)/i ||」という部分と、4行目の「html =~ /xml.+encoding[ =]+[\"\']?([^>[\"\']]+)/i」という部分がパッと見、別々のコードのように認識してしまう、誤認してしまうという感じです。
もちろん、ちゃんと読めば「||」の演算子があるので、一つの条件式なのだと理解は出来るのですが、コードの俯瞰性が少し落ちるかな、と思います。

あくまで自分の場合は、ですが、自分が例のコードを書くとしたらこのような感じでしょうか。

```ruby
def set_encoding(html)
  if html =~ /meta.+charset[ =]+[\"\']?([^>[\"\']]+)/i || html =~ /xml.+encoding[ =]+[\"\']?([^>[\"\']]+)/i
    enc = $1
  else
    enc = Kconv.guess(html).to_s
  end

  # to handle the obsolete charset name, which should've been extinct...
  enc = "Shift_JIS" if enc.downcase == "x-sjis"
  enc = "UTF-8" if !Encoding.name_list.map(&:upcase).include?(enc.upcase)

  html.force_encoding(enc)
  html.encode(
    "UTF-16BE",
    :invalid => :replace,
    :undef => :replace,
    :replace => '.'
  ).encode("UTF-8")
end
```