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

pockestrap

Web Programmer's memo

Rubyでdo-while

TwitterのTLでdo-whileが賑わっていたので。

調べてみたらbegin-endwhile修飾子で出来るらしい。キモい(かなり)

制御構造

while 修飾子 (中略) 左辺の式が begin 節である場合にはそれを最初に一回評価してから繰り返します。

cond = false

begin
  puts 'foo'
end while cond

# => foo

気持ち悪いですよね。

こんなアプローチはどうでしょうか

cond = false

def do_while(cond, &block)
  block.call
  block.call while cond.call
end

do_while ->(){cond} do
  puts 'foo'
end

# => foo

かっこいいですね。え、キモい?そう…