[Ruby]5分でわかる基礎構文

はじめに

本記事はRubyの基本的な構文についてまとめています。

初心者向けではなく、他言語を1つでも学んだことがある人を対象としています。詳細な説明はせず、「プログラミングにfor文があるのは知っている。Rubyではそれをどう書くか?」といった具合に流しで確認できるような内容にしています。

基礎構文

コメント

# 行コメント

# 複数行コメント
=begin
   複数行コメント (beginとendで挟みます)
=end

コンソール操作

# コンソール出力
puts("文字列")

# コンソール入力
str = gets.chomp
value = gets.chomp.to_i # 数値で受け取る場合は.to_iでの型変換が必要。

文字列操作

文字列結合

puts("abc" + "de") # abcde

結合には「+」を使用します。

変数展開

value = 30 
puts('abc #{value} de') # abc #{value} de
puts("abc #{value} de") # abc 30 de

文字列は「ダブルクォーテーション(“”)」と「シングルクォーテーション(”)」で囲うことができますが、

ダブルクォーテーションの場合、#{変数名}を埋め込むことで文字列結合「+」なしに文字列結合がなされます。

変数

# 定義
str = "str"
value = 300

Rubyでは明示的に型を宣言することがありません。

関数

# 通常の定義
# 引数なしの場合()を省略できる。
def myMethod
  定義
end

# キーワード変数あり
def myMethod(a: b: c:)
  処理
end
# キーワード変数ありの場合、関数呼び出し時、仮引数名の明示を強制できる。
myMethod(a: 10, b:20, c:30)

Rubyでは明示的に型を宣言することがありません。

nil

# 定義
value1 = ""
value2 = 0
value3 = []
value4 = {}
value5 = false

CやJavaでいうnullのこと。

nil判定

# 定義
puts value1.nil? # false
puts value2.nil? # false
puts value3.nil? # false
puts value4.nil? # false
puts value5.nil? # false

nil?関数でnilかどうか判定できる。

上記は全てnilに合致しない。

変数の実体(value1 ~ 5)が存在している場合は、nilになりえない。

nilとなる場合

# 配列の存在しないインデックスの指定
puts value3[9999].nil?             # true
# ハッシュの存在しないキーの指定
puts value4["undefined_key"].nil?  # true

参照したい変数の「実体」が存在しない場合にnilとなる。

true と false

nil以外はtrueとなる。

空文字 ""
"0" (文字列の"0")
0 (数値の0)

falseとなるのは以下の通り

nil

 

配列とハッシュ

配列

# 定義 (型混在可能)
arr = [10 , "str", 30]

# 参照
arr[2]

# イテレート
arr.each do |変数名|
  処理
end

ハッシュ

定義

# 空定義
x = {}

# 定義には3つの記法があるが、3.が一般的。
# 1.キーが文字列の場合
map1 = {"key1" => "value1", "key2" => 30}

# 2.キーがシンボル (:キー名)の場合
map2 = {:key1 => "value1", :key2 => 30}

#3.キーがシンボル (:キー名)の場合 (省略形)
map3 = {key1: "value1", key2: 30}

Javaのmap、Pythonの辞書と同様に、キーと値をセットで持つ構造をしています。

参照

# 1.キーが文字列の場合
map1["key1"] # 文字列でキーを指定

# 2.キーがシンボル (:キー名)の場合 または 3.省略形の場合
map2[:key1] # シンボルでキーを指定

追加

map1["new_key1"] = "new_value1"
map1[:"new_value1"] = "new_value2"

定義の1~3によらず、追加は文字列でもシンボルでも追加できます。

しかし、可読性などを考慮するならば1.で定義したならばキーは文字列指定、2.3.ならシンボル指定のほうが混乱が少なく済んでよいでしょう。

 

制御文

if文

if 条件式1
   処理
elsif 条件式2
   処理
else
   処理end

endが必要なことに注意!

for文

arr.each do |変数名|
  処理
end

型変換

# 文字列 ⇒ 数値変換
"300".to_i ⇒ 300

外部ファイル読み込み

# 拡張子の (.rbは省略)
require ファイルパス/ファイル名

クラス

定義

class Animal
  # インスタンスフィールド
  attr_accessor :変数名 
  attr_accessor :param1
  attr_accessor :param2
  # インスタンスメソッド
  def info
    return self.変数名 # インスタンスフィールドへはself.を付けてアクセスする。
  end

  # コンストラクタ
  def initialize(param1, param2)
    self.param1 = param1
    self.param2 = param2
  end   
end

コンストラクタ名は「initialize」で固定です。

インスタンス生成

animal = Animal.new(100, 200)

継承

# 継承先 < 継承元
class Cat < Animal
  # コンストラクタ
  def initialize(param1, param2, param3)
    # 親コンストラクタの呼び出し
    super(param1, param2)
  end 
end

 

 

コメントを残す