By U Zensen.

プログラミング、カメラを中心になんでも書く雑記ブログです。

JavaプログラマーがRubyに入門した際に調べたことまとめ!!

2016 / 12 / 31
Ruby
161230_title

はじめに!!

どうも!プログラミング大好きなぴーすけです!

久しぶりのプログラミング系の記事ですね!いえーい!

来年は転職もする予定なので、もう年末ですが頑張って勉強しましょう。そうしましょう。

Rubyを勉強する前に僕のプログラミング歴史ですが、一番初めにちゃんと勉強したのがjavaでした。そして、仕事でWEB系に携わっている事もあり、次にJavaScript、その次にPHPも少し勉強しました。ということで次はRubyですね。はい。

正直、Rubyのソースは全く見た事もないので、とりあえず基礎から少しずつやってみたいと思います!

Rubyの入門サイトはたくさんあるので、この記事ではJavaに慣れているプログラマーがRubyに入門する際に調べたことやJavaとの違いを中心にまとめたいと思います!

スポンサードリンク

Rubyとは

まつもとゆきひろ氏が開発した日本製のオブジェクト指向スクリプト言語で、主にWEB開発に使われるサーバーサイドのプログラミング言語となります。

公式サイトはRubyこちらです。

Rubyには以下のような特徴があります。

  • 直感的に書ける
  • 徹底的なオブジェクト指向
  • 豊富なライブラリ

ということみたいです。

RubyにはRuby on Railsという有名なフレームワークがあり、Rubyを学習する事イコールこのフレームワークを学習することになるくらい有名ですね。

この記事ではピュアなRubyについて学びます。

Rubyの基本

インストールについては、別サイトRubyのインストールにまとめてあるので省略します!あしからず!

ファイルの拡張子

拡張子はrbです。例えば

sample.rb

というファイルを作成すればOKです。

ファイルの実行

Rubyが使えることは前提で

ruby sample.rb

これでRubyの処理が実行されます。Rubyはインタプリタ言語なので、コンパイルはせずにそのまま実行できます。

Rubyの記述について

ここからRubyのコードの書き方について学んでいきます。

僕はJavaから入ったプログラマなので、Javaを学んだ人が気になるところを中心にまとめます。

調べてみるとかなり違うので面白いですよ!

それでは、ちぇけら!!!!

スポンサードリンク

文末にセミコロンはいらない

プログラミング言語は基本的に文末にセミコロンを記述し処理の区切りを明示的に示しますが、Rubyは不要です。改行ごとに1処理として判断してくれます。

以下の例で使っているputsは表示用のメソッドです。もう少し後の項で説明します。Sytem.out.printlnやconsole.logみたいなイメージです。

puts "putsは出力をするメソッドです"
puts "もう一度出力するよ"

これでもいいし、もちろんセミコロンで処理を分ける事も出来るようです。

puts "putsは出力をするメソッドです";
puts "もう一度出力するよ";

改行で処理のまとまりを判断しているので、以下はダメ

puts "putsは出力をするメソッドです"puts "もう一度出力するよ"

一行で書くならこう

puts "putsは出力をするメソッドです";puts "もう一度出力するよ";

こうすれば改行をしなくてもちゃんとセミコロンをつければ認識されます。でもRubyは基本的にセミコロンは使わない書き方をするみたいです。

コメント

コメントは基本的に#を使います。

#この一文がコメント化されます。

複数行をコメントしたい場合には以下

=begin
ここから

ここまでコメント
=end

これ以降を全てコメント!という書き方もできるようです。

puts "ここは動く処理"
puts "ここも動くよ!"
__END__
puts "ここより下は全てコメントアウトだ!"
puts "ここも当然コメントアウト..."

表示メソッド

引数に入っている値を出力します。似たようなメソッドが3つあったのでそれぞれの違いをまとめます。

print

引数に入った値に、to_s(文字列に変換するメソッド)で文字列に変換してから出力するメソッド。表示後に改行が入る事がないので、つなげて表示できます。戻り値はnil。

print "Hello,"
print "world!"

#=> Hello,world!

puts

引数に入った値に、to_s(文字列に変換するメソッド)で文字列に変換してから出力するメソッド。表示後に改行が入ります。戻り値はnil。

puts "Hello,"
puts "world!"

#=> Hello,
#=> world!

p

引数に入った値を表示します。改行があった場合や数字があった場合にわかりやすく表示されるので、主にデバッグように使うものらしい。戻り値は引数に入れた値。

p "Hello,\n world!"

#=> "Hello,\n world!"

入力メソッド

表示メソッドとは逆のユーザからの入力を受け取るgetsメソッド。getsで一度処理が止まり、ユーザからの入力を待ちます。入力があった段階で入力値を受け取り、続きの処理が動きだします。

puts = "名前を入力してください!"
name = gets.chomp #入力値がname変数に入る
puts "僕の名前は、#{name}です!" #僕の名前は、{入力値}です!

ちなみにchompメソッドは文字列末尾の改行文字を取り除いた文字列を返すメソッドです。

test = "これはテストです!\n" #末尾に改行

puts "#{test}うわーい!"
#=> これはテストです!
#=> うわーい!

test = test.chomp #末尾の改行を削除して上書き
puts "#{test}うわーい!"
#=> これはテストです!うわーい!

nullじゃなくてnil

プログラミングにおけるなにもない状態。これをJavaとかPHPだとnullと言いますが、Rubyの場合はnilというらしい。他にもObjective-Cなどはnilらしいです。

nilかどうか確かめるnil?メソッドもあるみたい。

sample = nil
if sample.nil?
  puts "nilです"
end

#=> "nilです"

変数について

変数はいきなり宣言できるみたいです。

ちなみに、文字列で変数の内容を使いたい場合には、#{変数}をダブルクォーテーションで囲うと展開されます。シングルクォーテーションでは展開されません。

name = "斉藤"
puts "僕の名前は、#{name}です!" #僕の名前は、斉藤です!
puts '僕の名前は、#{name}です!' #僕の名前は、#{name}です!

ちなみに、僕の名前は斉藤ではありません。笑

変数は単語ごとの区切りをアンダーバーで区切るようです。

user_name = "ユーザーの名前"

文字と数字について

文字はダブルクォーテーションかシングルクォーテーションで囲みます。その違いは変数を展開するかしないかどうか。

puts "ダブルクォーテーション"
puts 'シングルクォーテーション'

数値の場合は以下

puts 123
puts 3.14

文字列のメソッドはこんな感じで使えます。

puts "文字列".length #3
puts "文字列".reverse #列字文

数値ならこんな感じ

puts 3.14.round #3

インクリメント、デクリメント

javaなどで変数に値を足すときにこういう書き方ができます。

i++; //変数iに1を足す
i += 1; //変数iに1を足す

Rubyの場合は「++」で書けないので、以下のように書きます。

i += 1 #変数iに1を足す
i -= 1 #変数iから1を引く
i *= 1 #変数iに1をかける
i /= 1 #変数iを1で割る
i %= 1 #変数iを1で割ったあまりを入れる

型変換

文字列から数値へ、数値から文字列へ型変換するには以下のメソッドを使います。

#数値から文字へ
100.to_s #100 → "100"

#文字から数値へ
"100".to_i #"100" → 100

if文

ifはこんな感じです。

if #条件
  #やりたい処理
end

実際にはこんな感じ

if x == 10
  puts "xは10です!"
end

#=> xは10です!

ちなみに、オブジェクトが空の文字列かどうか確認するempty?メソッドがあります。nil?もそうですが、Rubyで真偽値を返すメソッドには「?」がつくのが慣例らしいです。

name = ""
if name.empty?
  puts "変数nameは空です!"
end

#=> 変数nameは空です!

javaでいうところの「else if」を使いたい場合は以下

name = get.chomp #入力値を受け取る

if name.empty?
  puts "入力なし"

elsif name == "斉藤"
  puts "あなたは斉藤ですね"

else
  puts "あなたは斉藤ではないですね!!"

end

「else if」ではなく「elsif」と書くみたいです。

「&&」と「||」はjavaと同じです。

あと「!」をつけた否定も同じように書けるのですが、ifの否定版であるunlessがあるそうです。

name = get.chomp

#「!」で条件を否定する
#nameが空ではない場合
if !(name.empty?)
  puts "入力あり"
end

#unlessで条件を否定する
#nameが空ではない場合
unless name.empty?
  puts "入力あり"
end

unlessはelsifが使えないみたいです。

一文でifを書くこともできます。unlessももちろんできます。

# 処理 if 条件式

name = "斉藤です"
puts "動きません" if name.empty? #nameが空な場合
puts "動きます" unless name.empty? #nameが空ではない場合

case文

caseに値を入れて、その値がwhenだったらどのような処理をする。という書き方ができる。

num = rand(3) #ランダムの値(0〜2)を生成する
case num
when 0
  puts "ゼロだ!"

when 1
  puts "イチだ!"

when 2
  puts "ニだ!"

else
  puts "それ以外だ!!"

end

配列

配列の書き方はこう!

#配列生成
color = ["red", "blue", "green"]

#インデックス0番目を取り出し
puts color[0] #red

#配列のサイズを取得するメソッド
puts color.size #3

#配列の後ろに値を追加するメソッド
puts color.push("white") #["red", "blue", "green", "white"]

#もう一度サイズを取り出すと増えてる
puts color.size #4

ハッシュ(連想配列)

JavascriptやPHPでは連想配列と言われるやつ。キーに対して値を保存することができる。

#ハッシュを生成
color = { "red" => "赤", "blue" => "青" }

#キーがredの値を取得
puts color["red"] #赤

#配列のサイズを取得するメソッド
puts color.length #2

#新しくキーが"green"で値が"緑"なものを追加
puts color["green"] = "緑"

#入れたやつを取り出してみる
puts color["green"] #緑

#sizeでも大きさは取れる
puts color.size #3

for文

forはJavaよりもサッとかけていい感じですね。

for 変数 in オブジェクト do
   処理
end

doは省略可能みたいです。

オブジェクトには範囲オブジェクトというものをいれます。そして、for文はその値を順に取り出しながら処理を行います。

取り出した値をiに入れて処理を行い、次のループでは次の値を取り出し、iに入れてまた処理をします。そして、範囲の上限の処理を行ったら繰り返し終了です。

for i in 1..100 do
  puts "#{i}回目の処理"
end

#=> 1回目の処理
#=> 2回目の処理
#=>  〜省略〜
#=> 99回目の処理
#=> 100回目の処理

while文

whileはJavaと似ていますね。

while 条件 do
  処理
end

条件にはループに入るための条件を書きます。ここがずっとtrueだと無限ループになるので注意が必要ですね。

i = 1
while i <= 100 do
  puts "#{i}回目の処理"
  i += 1
end

#=> 1回目の処理
#=> 2回目の処理
#=>  〜省略〜
#=> 99回目の処理
#=> 100回目の処理

break

ループを抜けるためのbreakはJavaと同じですね。

i = 1
while i <= 100 do
  if i == 10
    break #10回目のループで繰り返しを抜ける
  end
  puts "#{i}回目の処理"
  i += 1
end

puts "処理終了"

#=> 1回目の処理
#=> 2回目の処理
#=>  〜省略〜
#=> 9回目の処理
#=> 10回目の処理
#=> 処理終了

next

Javaでいう「continue」ですね。nextをすると、次の繰り返し処理に飛びます。

i = 1
while i <= 10 do
  if i % 2 == 0
    next #2で割り切れる数の時には処理を止めて次の繰り返しへ
  end
  puts "#{i}回目の処理"
  i += 1
end

puts "処理終了"

#=> 1回目の処理
#=> 3回目の処理
#=> 5回目の処理
#=> 7回目の処理
#=> 9回目の処理
#=> 処理終了

each文

Javaでいうところの「for each」ですね。配列とかハッシュの中がなくなるまで繰り返し処理を続けます。

配列の場合

color = ["red", "blue", "green"]
color.each do |value|
  puts value #1周目はred、2周目はblue、3周目はgreen
end

ハッシュ(連想配列)の場合

color = {"red" => "赤", "blue" => "青"}
color.each do |key, value|
  puts "#{key}は#{value}" #1周目は「redは赤」、2周目は「blueは青」
end

メソッド

#定義
def メソッド名(引数名)
  #処理
  #処理の最後の行が自動で戻り値になる
end

#呼び出し
変数 = メソッド名()

もちろん途中で「return」を使って明示的に値を返す事はできます。

def max(val1, val2)
  if val1 > val2
    return val1 #処理の途中で処理を中断して戻り値を返せる
  end
  val2 #明示的にリターンしなくても最後の行は戻り値になる
end

maxValue = max(1, 3)

シンボル

Rubyにはシンボルという概念があるらしい。これは少し難しそう。ちょっと入門したばかりの僕には手が負えないので、とりあえずはスルー。

参考:Rubyの文字列とシンボルの違いをキッチリ説明できる人になりたい

以上!!

ふぇー疲れたー!!!!

でも、新しいものを覚えようとするのはやっぱり楽しいですね!

めっちゃ長くなりましたがとりあえずこんな感じで一旦終わります。やってみて感じたのはJavaとは全然違うけど、JavaScriptと考え方がすこーし似ているかなーっていう感じ!

基礎をある程度学んだら今後は何か作ってみたいと思います!

次に勉強するのはRuby on Railsかなー

つーづく!

Pocket

コメント

コメントを残す