【一人 bugs.ruby Advent Calendar 2021】[Misc #18150] Proposal: Deprecate leading zero syntax to declare octals, since it's extremely confusing (and Python 3 removed it too)【4日目】
一人 bugs.ruby Advent Calendar 2021 4日目の記事になります。 今回は 8進数リテラルについて議論するチケットです。
[Misc #18150] Proposal: Deprecate leading zero syntax to declare octals, since it's extremely confusing (and Python 3 removed it too)
現状の Ruby は 0
が先頭に付いていると8進数として解釈されます。
p 012 # => 10
また 0o
が付いている場合も8進数として解釈されます。
p 0o12 # => 10
なのでうっかり次のようなコードを書いてしまうとこれはエラーになってしまう。
# "2021-09-01" のつもりで 09 と書いてしまった # これはエラーになる START_DATE = Date.new(2021, 09, 01) # error: Invalid octal digit
このようなケースがあるので 0
を使った8進数リテラルを Ruby 3.x では非推奨にし、Ruby 4.0 では 0011 => # 11
にしよう、というのがこのチケットの議題。
ちなみに先頭が 0
で8進数リテラルになっている言語は JavaScript
Go
Java
C
があり、逆にそうでない言語は Rust
と Elixir
とのこと。
個人的には 8進数リテラルを使ったことがないので気にはならないけど、既存のコードを非互換にしてまで入れる必要があるのかと言われると難しいところすねえ。