📖

一日一処: Rubyは人間が対話可能な言語になりえるか

2024/01/29に公開

Ruby言語

Rubyは、日本人が開発したプログラミング言語だ。非常に英文に近い記述ができる言語であり、書き方を工夫すれば、英文として表現することも可能かもしれない。

後置if

Rubyは、条件分岐を行の後部に記述することもできる。

known = true
if known then
  puts 'hello'
end

このように、他言語と同様に、if文を用いて、文字列を表示することができる。ただし、Rubyは、thenendが必要なため少々文字数が多いかもしれない。
ただ、後置ifを用いればこのような記述が可能だ。

known = true
puts 'hello' if known

関数を定義して英文に寄せる

これをたとえば、関数を用いると更に英文ぽさを実現することができる。

def you(name) = name === 'Bob'
puts 'I am Bob.' if you('Bob')

英文のような表現に見えてきた。もっと面白いことに、Rubyは、関数を実行する際の括弧()を省略することも可能だ。よって、このような表現ができる。

def you(name) = name === 'Bob'
puts 'I am Bob.' if you 'Bob'

関数の定義さえ見えなければ、一つ前に比べ、英文に近づいてきた。ただし、通常会話の際にputsなんて発言することも書くことも稀かもしれないよって、putsとは異なる関数を設定しよう。

def you(name) = name === 'Bob'
def say(msg) = puts msg
say 'I am Bob.' if you 'Bob'

概ね英文としても遜色ない表現になったのではないだろうか。
最後にもう少し英文に寄せてみよう。

def you(func, work) = method(func).call ['write', 'read'], work
def can(works, work) = works.include? work
def say(msg) = puts msg

say 'You can write' if you :can, 'write'

クラスを定義して更に英文にしていく

カンマやコロンが登場してしまうのが、若干不格好ではあるものの、このように英文に寄せて書いていくプログラミングも面白いのではないだろうか。
プログラム自体が命令形(動詞が先頭)になることが多いが、今回は、主語(You)を表現して終わる。

class Person
  attr_accessor :name, :works
  def initialize(name, works)
    @name = name
    @works = works
  end
  def can(work) = @works.include? work
  def say_can(work) = puts "I can #{work}"
end
you = Person.new('Bob', ['write', 'read'])

you.say_can 'write' if you.can 'write'

Discussion