読者です 読者をやめる 読者になる 読者になる

Bye Bye Moore

猫マンション建築の野望を胸に零細事業主として資本主義の荒波に漕ぎ出したアラサー男の技術メモ

until修飾子でloop系構文が不要になるケースがある

until修飾子は後置きのifみたいな感じで使える構文です。
違いは、フラグが立つまで延々と読み続けてくれること。
StringIOやSerialPortみたいな読みに行く系ライブラリでは重宝します。

実際のところ

たとえば、以前扱ったN進数リテラルが混在している文字列を切り分ける用途をStringIOで書き直す場合、

require 'stringio'

s = StringIO.new("\u0012aga\x98ga987HH")
(ary ||= []) << s.read(2) until s.eof?
p ary

てな感じでやることができます。
これは、

require 'stringio'

s = StringIO.new("\u0012aga\x98ga987HH")

until s.eof?
(ary ||= []) << s.read(2)
end
p ary

と等価です。

入り組んだ処理はメソッドにまとめてしまえば見通しよく書き直せる……かも?

参考もと

制御構造