2. Hello, World!
Rubyの基礎(実行/入出力/変数/定数)
実行
まずは、練習用ディレクトリ(推奨ディレクトリ構成の場合は ~/Documents/ruby_lecture/examples/ )の中に、以下のような hello.rb を作ってください。
1
print "Hello World"
ターミナルを起動し、 hello.rb を保存したディレクトリまで移動した後、以下のように実行をしてください。
1
2
3
4
5
6
# 実行方法( "Documents" > "ruby_lecture" > "examples" > "chapter1"に保存した場合)
$ cd ~/Documents/ruby_lecture/examples/chapter1
$ ruby hello.rb
#=> Hello World
※ #=>は実行結果(出力)を表しています。
とても簡単なプログラムですが、 これもprint
という「オブジェクトを文字列に変換して出力する機能メソッド」を使った、立派なプログラムです。
メソッドについての詳しい解説はchapter9のメソッドで解説します。
Note : オブジェクトって?
オブジェクトは「データ」及び「操作の集まり」です。
オブジェクトにはそれぞれ一意のidが割り当てられています。
idの確認には.object_id
というメソッドを利用します。
1
2
3
4
5
6
7
8
9
10
11
# 文字列"こんにちは"の一意のid
p "こんにちは".object_id
#=> 70319020972280
# printメソッドの一意のid
p print.object_id
#=> 8
# printメソッドの一意のidの一意のid
p print.object_id.object_id
#=> 17
色々なオブジェクトを確認してみると、何か発見があるかもしれません。
出力
先ほど使用したprint
のように、標準出力を行うメソッドで代表的なものを紹介します。
メソッド | 文字列と数値の区別 | 配列などの表示 | 文字列の最後に改行 |
---|---|---|---|
print |
不可 | そのまま | なし |
puts |
不可 | 中身のみ | あり |
p |
可 | そのまま | あり |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
array = [1, 2, 3]
str = "123"
num = 123
print str
print num
print array
#=> 123123[1, 2, 3]
puts # 改行を出力
puts str
#=> 123
puts num
#=> 123
puts array
#=> 1
#=> 2
#=> 3
p str
#=> "123"
p num
#=> 123
p array
#=> [1, 2, 3]
Note : 日本語使用時の注意点
今回は日本語を扱っても何の問題もありませんでしたが、日本語を扱う際には少々注意が必要です。
Rubyのバージョンが2.0以上であれば、文字コードはUTF-8指定になっています。
そのため、UTF-8以外の文字コードで作成・実行すると、エラーが出てしまいます。
1
C:hello.rb:1: invalid multibyte char (UTF-8)
上記のようなエラーを防ぐには、プログラムの文字コードを指定しなければなりません。
指定する方法はいくつかありますが、ここではMagic Commentを紹介します。
1
2
#coding:shift_jis
print "こんにちは、世界"
また、Ruby1.9以下で日本語(マルチバイト)の文字列を扱うためには、
UTF-8であっても文字コードを明示的に指定しなければ、エラーとなってしまいます。
Ruby1.9系で日本語を扱う場合や、2.0以上でもUTF-8以外の文字コードを扱う時は、
忘れずにMagic Commentを書きましょう。
変数
変数は、プログラムの作成において非常に重要な役割をもっています。
まずは以下のプログラムを実行してください。
1
2
3
4
5
6
7
puts "Good morning Taro"
puts "Hello Taro"
puts "Good evening Taro"
puts "Good night Taro"
例えば上記のプログラムの"Taro"
を"Hanako"
に変えたくなったとします。
全て手動で変えるのは大変な手間であり、大きなプログラムだとミスも発生してしまいます。
このような場合に変数はとても役に立ちます。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
name = "Taro"
puts name
#=> Taro
puts "Good morning #{name}"
#=> Good morning Taro
puts "Hello #{name}"
#=> Hello Taro
puts "Good evening #{name}"
#=> Good evening Taro
puts "Good night #{name}"
#=> Good night Taro
変数name
の値を"Taro"
から"Hanako"
変えてみてください。
name
の部分が全て"Hanako"
になります。
ちなみに、 #{}
は文字列の中で式を展開したい場合に用います。
今後も、文字列の中で変数などを扱いたい場合に重宝しますので、今のうちに覚えておきましょう。
定数
変数と同じように扱えますが、一度代入してから再代入すると警告が出ます。
定数は全て大文字で定義されます。
ただし、エラーにはならずに値は上書きされてしまうので注意してください
1
2
3
4
5
6
7
8
NAME = "Taro"
puts NAME #=> Taro
NAME = "Jiro"
#=> warning: already initialized constant NAME
#=> warning: previous definition of NAME was here
puts NAME #=> Jiro
コマンドライン引数
Rubyプログラムを実行する際、Rubyプログラムに渡す値(引数)のことです。
まずは以下のプログラムを作成してください。
1
2
3
4
5
last_name = ARGV[0]
first_name = ARGV[1]
puts last_name
puts first_name
下記の通り、実行するファイルの後ろに渡したい値を半角スペース区切りで渡すと、
プログラム中で利用することができます。
1
2
3
$ ruby argv.rb 杉並 太郎
#=> 杉並
#=> 太郎
入力
gets メソッドは、データを一行読み込むメソッドです。
プログラムを実行中に、任意の文字列をプログラムに渡したい時などに使用できます。
以下のプログラムを作成しましょう。
1
2
3
name = gets
puts "こんにちは #{name}"
コマンドで実行した後、太郎と入力してください。
1
2
3
$ ruby gets.rb
太郎 (ここで入力)
#=> こんにちは 太郎
Note : gets メソッドの注意点と chomp メソッド
上記の通り、 gets メソッドは標準入力で入力された文字列を一行分取得するメソッドです。
すなわち、 getsメソッドにより読み込まれる値には「改行コード (“\n”)」が含まれることに注意してください。
1
2
p gets # "hello"を入力してエンター
#=> "hello\n"
改行コードを取り除きたい場合、 chomp メソッドが便利です。
chompメソッドは文字列末尾の改行文字を取り除いた文字列を返します。
また、 chomp には破壊的メソッドである chomp! メソッドも存在します。
1
2
p gets.chomp # "1"を入力してエンター
#=> "1"
コメント
これまでにも登場していますが、プログラムにはコメントというものを記述することができます。
コメントとして書かれた部分はプログラムとして実行されず、プログラムの説明や注釈などを書くために利用します。
Rubyでのコメントの書き方には、次のようなものがあります。
1行コメント
#
が記述された行は、#
以降がコメントアウトされます。
1
puts "ここは実行される" # ここは実行されない
複数行コメント
=begin
から=end
までの間の行は、すべてコメントアウトされます。
1
2
3
4
5
=begin
複数行の
コメントアウトが
できます
=end
末端コメント
__END__
はプログラムの最後を表し、これ以降の行は実行されません。
1
2
3
puts "ここまでが処理"
__END__
これ以降は実行されない
Note : __END__について
実際には、__END__
は単純なコメントアウトではなく、DATA
というオブジェクトから参照することができます。
1
2
3
4
5
puts DATA.gets
#=> "hello\n"
__END__
hello
演習問題
演習問題のファイルは ~/Documents/ruby_study/exercises に作成してください。
問1
コマンドライン引数で「みかん」と「50」を渡し、以下の結果が出力されるプログラムを作成してください。
1
2
$ ruby 2-1.rb みかん 50
#=> みかんの値段は50円です
問2
getsメソッドを使用し、以下の結果が出力されるプログラムを作成してください。
1
2
3
4
5
$ ruby 2-2.rb
# =>
果物の名前を入力してください: (ここで「みかん」と入力)
値段を入力してください: (ここで「50」と入力)
みかんの値段は50円です