"return"というコマンドの理解を通してcodingについて考えてみる


def sayHi(name = "Steve")
s = "hello!" + name
# メソッドは返り値を持たせることも出来る。ここではsが返り値
return s # returnは省略可能
end
ここではdef sayの部分で何も名前を指定しない場合はSteveとなるように設定がなされている。
次の行でsを打つとhello入力した名前(何も入力がない場合はSteve)となるように命令をしてあげる。

# 返り値を持つのでメソッドの結果を代入することが可能
greet = sayHi()
puts greet # hello! Steve

# このメソッドで定義された変数は外からアクセスできない!!
# defとendの間でしかsという変数は定義されていないから
puts s # とやるとエラーを吐く

これはつまりどういうことなのか。要するに各ファイルというのはパソコンに流した時にどう出力されるのかをこちら側で指定する必要があるわけである。もっと簡単に説明するために以下の例を見てみる。Controller.rbというファイルに以下のコーディングがなされていたとする。

def test
p'hello'
end #ここまでをpart1と呼ぶことにする

p world

def world
return 'world'
end # part1の終わりからここまでをpart2と呼ぶことにする

def hoge
w = 'yeah'
h = 'hey'
z = 'god...'
return h # return hがないと'god...'出力されてしまう
end
p hoge # part2の終わりからここまでをpart3と呼ぶことにする

このままパソコンに流すとpart1は何も出力されない。testというアクションがどこにも定義されていないからである。これはまるでパソコンに向かって「testというアクションがあるからhelloとプリントしてね」と言っていることと同じである。現実の世界ではこいつが何をしようとしているか大体の検討がつくがプログラミングの世界では「testというものがこういうものでこのコマンドを入力するとこのように出力されるという詳細な流れを書かなければならないのである。
part2はこのファイルで一番最初に出力される部分である。ファイルをコンピュータに流すとコンピュータは上からコードの出力を行うのだが、part1が出力されないため一番最初に出力されるのはpar2の部分。つまりworldである。これはあえてp worldを最初に書いたのだが仮にコンピュータが定義なしのworldを確認したとしてもその下にちゃんとworldに戻ってくるように定義されているのである。(これを返り値と呼ぶ)
part3は結果としてheyが出力されるようになっている。しかしもしreturnというコマンドを消したとしたら出力される値は'god...'である。何故かと言うとコーディングは上から下にかけて順番に読み込んでいく特性があり、正確な定義やコマンドが無い限りはその方法によって情報が出力されるからである。