Hello World
puts "Hello world"
標準入力
val = gets puts val
こうも書けるみたい
gets puts $_
p
人間にわかりやすく出力してくれるみたい
p 5 p "こんにちは" p 10.4
これを実行すると
5 "\202\261\202\361\202\311\202\277\202\315" 10.4
oh 日本語わかりにくいYO
if文
val = gets if val == "hello" puts "外人さんあるね" elsif val == "こんにちは" puts "大和魂" else puts "わからないある" end
ところがhelloと打ち込んでも「わからないある」って出てくる。
どうやらgetsでhelloと打ち込んでEnterを押すと"hello\n"にしてくれるからのようだ。
これは、chompというメソッドで解決できるとあったのでやってみる。
val = gets.chomp if val == "hello" puts "外人さんあるね" elsif val == "こんにちは" puts "大和魂" else puts "わからないある" end
実行結果
hello 外人さんあるね
times(繰り返す)
5.times do puts "Hello world" end
実行結果
Hello world Hello world Hello world Hello world Hello world
timesその2
5.times do |arg| puts "#{arg}番目" end
文字列内の#{ }は、展開式っていうらしい。
#{から}までの間の式が評価される。
times doの後の|arg|は0,1,2,3,4と順番に値が入っていくのだ。
実行結果
0番目 1番目 2番目 3番目 4番目
配列
これが無いと始まらない。
[データ1, データ2, ....]と書いていく。
サンプル
array = [100, 200, 300] puts array[0] puts array[1] puts array[2]
実行結果
100 200 300
配列にはlengthというメソッドがあるらしい。
これとさっきのtimesを組み合わせると上のプログラムは
サンプル
array.length.times do |i| puts array[i] end
実行結果
100 200 300
思ったとおり。
配列には色々なものを入れれる。
サンプル
array = [1, "Hello", 10.2, "hoge"] p array
サンプル
array = [] # 空の配列 p array array.push 1 # 追加 p array array.push "hoge" # さらに追加 p array
実行結果
[] [1] [1, "hoge"]
予想通り。
追加できたら消すこともできなきゃね。popで取り出せるみたい。
サンプル
array = [1, 2] p array p array.pop p array p array.pop p array p array.pop p array
実行結果
[1, 2] 2 [1] 1 [] nil []
while
お次はwhile
さっそく実行
サンプル
i = 0 while i < 10 puts "Hello world" i += 1 end
実行結果
Hello world Hello world Hello world Hello world Hello world Hello world Hello world Hello world Hello world Hello world
とりあえず次だ!
case (switch文か)
caseは、Javaでいうところのswitchみたいcase when else endで書く。
サンプル
val = gets.chomp case val when "hello" puts "外人さんあるね" when "こんにちは" puts "日本人あるね" else puts "わからないあるね" end
実行結果
*その1 hello 外人さんあるね *その2 こんにちは 日本人あるね *その3 ぼんじゅーる わからないあるね
ハッシュ(連想配列)
JavaでいうところのMap
これが無いと不便よね。
{}を使って連想配列を作るようだ。早速!!
サンプル
# 空のハッシュ val = {} p val # 中身のあるハッシュ val = { "Name" => "太郎", "Age" => 14, "Memo" => "よくある名前だが、実際にはあまりお目にかかれない" } # ハッシュからの値の取り出し p val p val["Name"] p val["Age"] p val["Memo"] # ハッシュへの値の追加 val["Height"] = 145 val["Weight"] = 48 p val
実行結果
{} {"Name"=>"\221\276\230Y", "Memo"=>"\202\346\202\255\202\240\202\351\226\274\221O\202\276\202\252\201A\216\300\215\333\202\311\202\315\202\240\202\334\202\350\202\250\226\332\202\311\202\251\202\251\202\352\202\310\202\242", "Age"=>14} "\221\276\230Y" 14 "\202\346\202\255\202\240\202\351\226\274\221O\202\276\202\252\201A\216\300\215\333\202\311\202\315\202\240\202\334\202\350\202\250\226\332\202\311\202\251\202\251\202\352\202\310\202\242" {"Name"=>"\221\276\230Y", "Memo"=>"\202\346\202\255\202\240\202\351\226\274\221O\202\276\202\252\201A\216\300\215\333\202\311\202\315\202\240\202\334\202\350\202\250\226\332\202\311\202\251\202\251\202\352\202\310\202\242", "Weight"=>48, "Height"=>145, "Age"=>14}
ぎゃー。
日本語が読める形で出てこないの忘れてたorz
でもちゃんと動いてるよね。うん。
メソッド
ついにメソッドを作るところまで来た。
def 名前 引数リスト 中身 end
という方法で書くようだ。
早速!
サンプル
def say_hello puts "Hello" end say_hello
実行結果
Hello
問題ない。
次は引数ありバージョン
サンプル
def say message puts message end say "Hello"
実行結果
Hello
ここまで来たら、複数引数バージョン
サンプル
def to_say to, message puts to puts message end to_say "to Tarou", "Hello"
実行結果
to Tarou Hello
ファイル分割
大きなものを作ったり、ユーティリティ的なものを作ったときとか別ファイルにしときたいですよね。
require "ファイル名"
で他のファイルを取り込めるようです。
本当かどうか早速!!
サンプル
say.rb
def say message puts message end
say_client.rb
require "say.rb" # 別ファイルを読み込む say "Hello" # 別ファイルで定義したメソッドを呼び出す
配列その2
配列には色々なメソッドがある。
便利そうなのは、each!!C++のstd::for_eachやJavaの拡張for文やC#のforeachみたいなものらしい。
色々な亜種もある。使ってみよう。
サンプル
array = ["a", "b", "c"] # 単純に最初の要素から舐めていく array.each do |a| puts a end puts "---------------------" # eachと違って要素の数だけiが0, 1, 2...と増えていく array.each_index do |i| puts array[i] end
実行結果
a b c --------------------- a b c
ふぅ。こんなもんか。