ドキュメントの場所を確認 (3.x.xならどの版でも大きくは変わらない)。
1,2行目のお約束のパターン(なくてもいい)。
ただし、Windows環境はではインタプリタは「関連づけ」で選ばれる(下図)ためこのパス名はOS的には意味を持たない。
が、Atomなどのエディタの中で実行する時(Atom-runnerなどのRunner系のパッケージを使用)など、
Windows内でも活用されるケースはあるようだ。
なお、Rubyは(大別すると)インタプリタ言語に分類され、ソースファイルが直接実行される。 そうでない言語(実行形式のファイルが一旦作られるもの)はコンパイラ言語(右図)と呼ばれる。
コメント文字は #
(原則として)一行に1つの「式(または文)」が書かれる。
クラスや関数(またはメソッド)を作って、使う、ことで大きなプログラムが構成される。
その作り方は追々紹介することにして、当面は作り付けの ( ライブラリとして誰かが提供してくれた)クラスやメソッドの使い方を学んでいく
複数行の入力もできます。
最近は irbの代わりに pryも使われるようになっています。
起動の方法: いくつかある
終了の方法:
変数と関数名:
a=1
などという使い方(代入の左辺値として)がされていれば変数と思っていい。a()
や a(1,2,3)
などのように括弧が後置されていれば関数呼出しだと思っていい。リテラル(数値、文字列):
'abc'
や "def"
などのように
クォート文字で囲むのが基本。演算子:
+
, -
, *
,
/
などの記号や、++
, +=
,
===
などのように組み合わせたものが演算子。カッコの類のもの:
( )
, { }
, [ ]
を使う。(それぞれの文字の呼び方は知ってる?)
括弧は入れ子になってもいいが、必ず同じ種類のものと対向する必要がある。
他に do
~ end
という形のものもあり これは {
~ }
とほぼ同等の意味
100.times {
puts "hello"
}
のように
対応する括弧が互いにそっぽを向いた位置関係になることも多い
(テキストとしてのつながりを考えると互いに向かい合った関係であることはわかる)
プログラム例:
line = gets()
puts(line)
確認:
文法的補足:
変数の宣言や形名記述は不要です。
たとえば他の言語では
java.io.BufferedReader stdReader =
new java.io.BufferedReader(new java.io.InputStreamReader(System.in));
String line;
line=stdReader.readLine();
のように書くが、Rubyでは(良くも悪くも)短く書ける。
関数のパラメータ列を括弧で囲まない書き方もOK。
また、パラメータ数が0のときも括弧は省略できる(文法的曖昧さがなければ)。
ので、以下のように書くこともできる。
line=gets
puts line
関数の値(結果)を別の関数呼出のパラメータとして渡すことができるので、
前述のプログラムは、
puts(gets())
と書いたり、もっと短く
puts gets
と書いても同じ動作をする。
g(f(x))
(さらに一歩踏み込んだ話:) 実は(Rubyでは)関数名と同じ名前の変数も定義できる (が推奨はされない)。
gets()
の代わりに、readlines()
を使う機能的には前節と(半分は)同じだが、
while gets do
puts $_
end
というプログラムは一行ずつ反応を返す
⋆
このプログラムを実行したとき、プログラムが限りなく入力を受け付けることになる。
終了させるためには、入力完了を知らせる操作(右板書図)を知っておく必要がある
(今後も頻繁に使うので記憶しておいて下さい)。
while は 繰り返しのための制御構造の1つ。
文法は while 式 [do] ... end
となっている(一行で表現されている)。
do
は省略可能(マニュアルで
[…] は 省略可能の意味(お約束事))。
式 gets
を「評価」し、値が「偽」(に相当するもの)になれば繰り返しを終了する。
入力完了時(やファイルの末尾)で gets が値 nil を返す (という仕様)。
do end
は 波括弧 {}
(ブレース)
と概ね同等(前述)なので、このプログラムは
while gets do puts $_ end
や
while gets puts $_ end
や
while gets { puts $_ }
という書き方をしてもいい。ただし、ループの中に2つ以上の式(や文)があるときは、
例えば
while gets do print "--->" ; puts $_ end
のように間に ;
(セミコロン)を入れる必要がある
なお、rubyでは、while構文などで使う条件式の値として、
false
および nil
ならば「偽」(ループは終了する)、ここでは(Rubyでは定跡だが)$ _ というワザを使っている。
gets
は読み込んだ文字列を変数
$_
に(明示しなくても)セットするので
それを活用して簡便なプログラムを書いている。
勿論、自前の変数を使って(明示的に代入して)書くこともできる。
while line=gets do puts line end
演算子(としてrubyでは分類される)= を含む式は、
=
の左辺に置かれた変数名(など)に値をセット(代入)するとともに、=
は代入演算子とも呼ばれる
例えば以下の式は、右図のように解釈され、a,b,c,d の4つの変数に 同じ値(100)がセットされる
a = b = c = d = 100
従来の逐次型プログラミングスタイルでは、以下のようなシンプルな書き方も よく行われてきた(参考に示す)。
while true do
puts gets
end