かずきのBlog@hatena

日本マイクロソフトに勤めています。XAML + C#の組み合わせをメインに、たまにASP.NETやJavaなどの.NET系以外のことも書いています。掲載内容は個人の見解であり、所属する企業を代表するものではありません。

勉強一日目

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
実行結果
[1, "Hello", 10.2, "hoge"]

ふむ〜。
JavaのListですな。

配列に要素を追加できる。

サンプル
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でいうところのMapC++でいうところのstd::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" # 別ファイルで定義したメソッドを呼び出す
実行結果
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


ふぅ。こんなもんか。