【Ruby】コーディングの問題を解く時とかに見るやつ【自分用】
ここ最近コーディングの問題とかを解くときはなんとなくC++を勉強しながら使っていましたが、急遽Rubyを使うタイミングがやってきたので勉強しながら残します。Ruby全然触ったことないので初歩からやります。
作ったプログラムをコンソールで実行する
/ファイル名.rb
puts 'hello'
$ ruby ファイル名.rb
hello
標準入力
a = gets
b = gets.to_i # int型で取得
変数 = gets で取得できる。デフォルトでは文字列として取得できる。文字列ではなく数値を扱いたいときはgets.to_iと書くと扱える。
標準出力
puts 'ringo'
puts "banana"
puts 'ringo' + 'rilla'
# コメントアウト
//出力
ringo
banana
ringorilla
puts '出力したい文字' で出力できる。シングルコーテーションでもダブルコーテーションでも良い。
# コメントアウトしたいところ でコメントアウトできる。
'文字列'+'文字列'で合体できるウホ。
数値と四則演算
puts 2 # 数値
puts 2 + 3 # 足し算 2足す3
puts 10 - 3 # 引き算 10引く3
puts 2 * 8 # 掛け算 2掛ける8
puts 20 / 4 # 割り算 20割る4
puts 10 % 3 # 10を3で割った余り
puts '2 + 3'
//出力
2
5
7
16
5
1
2 + 3
他の言語同様に四則演算できる。
数値を扱うときはコーテーションなしで直接書くと難しい数値の計算をやってくれて助かる。
コーテーションで囲むとやってくれない。
変数
これも他の言語と同じ感じで使える。しかも変数の型を定義しなくても使える。Rubyすげー!
name = 'リンゴリラ'
puts name
puts name + 'ウホウホ'
name = name + 'ッパ'
puts name
//出力
リンゴリラ
リンゴリラウホウホ
リンゴリラッパ
型を指定しなくていいので入れるのは楽そう。でも何が入っているか後でわかりらなくなりそうで怖い。
また「変数+文字列」とかやりたいときはダブルコーテーションで囲って#{変数名}で埋め込める。シングルコーテーションだと全体が文字列として出力される。
age = 24 # 数値
puts "リンゴリラ#{age}歳独身"
puts 'リンゴリラ#{age}歳独身'
//出力
リンゴリラ24歳独身
リンゴリラ#{age}歳独身
条件分岐(if文)
これも基本的に他の言語と同じように使える。ただ若干表記の違いとかがある。
oyatsu = 'ichigo'
if oyatsu == 'ringo'
puts 'ウホウホ'
elsif oyatsu == 'banana' # else if ではなく elsif
puts 'まぁバナナでもええか...'
else
puts 'リンゴをください'
end
//出力
リンゴをください
まずif文を書くときに{}が不要。終わるときにはend。
条件の書き方は他の言語と同じで、「&& || < > == !=」などいつもどおりに使える。
ただし「else if」ではなく「elsif」と書く必要がある点に注意。調べてみると、RubyやPerlではelsifを使い、C言語とかではelse ifを使っているっぽい。実際にコードを書いたときの文字数とか発音の仕方とか開発者のそこらへんのこだわりからそういう仕様になっているらしい。
whileループ
num = 0
while num < 10
puts num
num = num + 1
end
0
1
2
3
4
5
6
7
8
9
while 条件式 やって欲しい処理 endで使える。ほんとは条件式の後ろにdoが書いてあったりするけど省略可。他の言語同様、条件式がtrueになるまでやって欲しい処理をやってくれる。
配列
animals = ['lion', 'rabbit', 'snake', 'ringorilla' ]
puts animals
puts animals[0]
puts "私は#{animals[3]}です。"
//出力
lion
rabbit
snake
ringorilla
lion
私はringorillaです。
forループ
for i in 0..5
puts i
end
# C++でいうところの
for (int i = 0; i < 6){
cout << i << endl;
}
/出力
0
1
2
3
4
5
for 変数(i) in 範囲オブジェクト(0..5) 繰り返しやって欲しい処理 end
でやってくれる。
範囲オブジェクトってなんやねん、ってなるけどざっくりと「0~5」とか「a~z」とかで表せる範囲のものたちという解釈。実際にはこの範囲オブジェクトの要素が順番に使われていって、全部使ったらループ終わり!になる。
上の例だと「0~5を順番にiに入れる、iを表示」をループさせて5まで入れたら終わり、となる。
ちなみに範囲オブジェクトのところを「0...5(ピリオドが1個多い)」にすると「5は含まない」になる。
ハッシュ
勉強中問題解くときに使いたいのにいっつもうまく使えないやつ
keyとvalueの組み合わせを管理できる。
split
文字列を好きなところで分割して配列にしてくれる。以下では例文を半角スペースで分割してみる。
/split.text
He is the biggest ringorilla.
/split.rb
line = gets.split(" ")
p line
puts line
$ ruby split.rb split.text
["He", "is", "the", "biggest", "ringorilla."]
He
is
the
biggest
ringorilla.
この他にはカンマで区切ったりがよく使う(と思う)。