LoginSignup
0
0

JavaのSEがRubyを書くためのまとめ

Last updated at Posted at 2021-12-23

#目的
・Rubyの基本を理解し、他人のコードを読めるレベルに到達する。
・基本を整理しつつ、Javaとの違いを関連付けをしたい。
(・Qiitaデビュー)

#動確環境
OS: Mac
Version: 2.6.8p205

#基礎知識
##全てがオブジェクト
文字列、配列はJava同様にオブジェクト。
さらには、数値、真偽値、nil(Javaではnull)、正規表現等もオブジェクト。

なので以下のように、それぞれに対してto_sメソッドでオブジェクトから文字列化することも可能。

true.to_s
nil.to_s

##文の区切り
基本的に文の区切りにセミコロン不要、改行でよい。
1行に複数の文を記述したい場合に明示的に;で区切ることは可能。

##コメント
◯1行コメント
Java: //
Ruby: #

◯複数行コメント

/*
Javaコメント
*/
=begin
Rubyコメント
=end

##変数
###型定義
動的型付け言語なので、宣言時のデータ型記述は不要。
(慣れないうちはコーディングしてて不安になる)

str = 'hello'
int = 10 * 10

型宣言していないので異なるデータ型を代入できてしまうので注意が必要。

###命名慣習
Javaではキャメルケースが多いが、Rubyではスネークケースが慣習。

snake_variable = 'スネークケース'

##文字列

シングルクオートとダブルクオート

Javaでは1文字の場合を除きダブルクオートで囲むが、
Rubyでは以下の違いがある。
・シングル -> 特殊文字をそのまま出力。
・ダブル -> 特殊文字の適応。文字列内での式展開。

# 特殊文字
puts 'hello \n world' #改行されないで/nごと出力。
puts "hello \n world" #改行される

# 式展開
name = "ボブ"
age = "F"

puts "私は#{name}です。#{age.to_i(16)}歳です。" # name、ageに式展開されてから入る
#私はボブです。15歳です。

### 文字列同士の比較

Java: "AAA".equals("AAA");
Ruby: "BBB"== "BBB"

数値

###インクリメント・デクリメント
Rubyには++、--演算子が使えない。
Java: n++;
Ruby: n += 1

他はJavaと大きな違いはない印象。

真偽値と条件分岐

Rubyでは、Javaと異なり以下のルールがある。
・false、nilであれば
・その他は全て真

# 以下のものは全て真
1
-1
'false'
''

nilを偽で使うケースは、データの有無で処理を分けたい時に便利。

# データを取得するような関数
data = find_data(hoge)

if data
  puts "データあり"
else
  puts "データ無し"
end

if文

・全体的に、Javaのifからカッコを無くした感じ。
・"else if"が、"elsif" になっている点に注意。
・終わりにendの記述。
最後に評価された式を戻り値として返す。

if 条件a
  #処理a
elsif 条件b
  #処理b
else
  #処理c
end
# 最後に評価した式を返す。
age = 20

result =
if age < 20
    "未成年"
else
    "成人"
end

puts result # 成人

また、ifを修飾子として書くこともできる。
(英語っぽい書き方だね)

point = 3
day = 1
point *= 5 if day == 1
puts point # 15

メソッド

###定義
・Javaから{}を無くした感じ。
・def,endを記述。
・戻り値の型宣言はやはり不要。
・引数が必要ない場合は、省略可能。

def greeting
  "こんにちは!"
end

達筆中、、、

#参考文献
プロを目指す人のためのRuby入門[改訂2版] 言語仕様からテスト駆動開発・デバッグ技法まで (Software Design plus)

0
0
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0