LoginSignup
0
1

Ruby 基本文法【基礎編】

Last updated at Posted at 2023-06-26

はじめに

Ruby の基礎文法について、学習内容を載せておきます。
今回は、Rubyプログラミングの概要や変数、オブジェクトの種類に関する内容です。

目次

  1. Rubyプログラミングの特徴
  2. 変数
  3. オブジェクト出力
  4. 文字列オブジェクト
  5. 数値オブジェクト
  6. 比較演算子
  7. クラス・メソッドの出力
  8. 参考文献

Rubyプログラミングの特徴

インタプリタ

プログラム実行の際、1行ずつ機械語に翻訳していく言語のため、コンパイル不要

変数に型がない

Ruby の変数はどんな型のデータも格納可能なため、変数の型を意識する必要なし

変数宣言不要

変数の種類は変数名から判断

オブジェクト指向言語

全てのデータはオブジェクトとして扱い、クラスや継承も可能(※多重継承は禁止)

メモリ管理不要

オブジェクトのメモリ解放は Ruby が自動的にしてくれるため、ガーベジコレクションの実施不要

特異メソッド

ある特定のオブジェクトへメソッドを付加することができる

コメント

コメントアウトには、#または=begin~=endを使用します。

  • # 単一行コメント
    
    =begin
        複数行の
        コメント
    =end
    

変数

変数は、以下の種類があります。

ローカル変数

  • 小文字または`_'で定義

  • 同スコープ内でのみ有効

  • class Class
        def Method1
            # ローカル変数
            l = 1
        end
    
        def Method2
            puts(l)
            # => Method2 は Method1 と別スコープなので l は使用できない
            # => 未定義エラーとなる
        end
    end
    
    Class.Method2 # クラス内のメソッド呼び出し
    
    実行結果
    Traceback (most recent call last):
        1: from hensuu.rb:14:in `<main>'
    hensuu.rb:8:in `Method2': undefined local variable or method `l' for Class:Class (NameError)
    

    Method2 は Method1 と別スコープでlは使用できないため、未定義エラー

インスタンス変数

  • @で始まる変数
  • 定義したクラスまたはサブクラスのメソッドからs参照可能
  • 初期値はnil
  • class Class
      def Method1(value)
          # インスタンス変数
          @i = value
      end
    
      def Method2
        puts(@i)
      end
    end
    
    test = Class.new()
    test.Method1(3)
    test.Method2()
    
    実行結果
    3
    

クラス変数

  • @@で始まる変数
  • クラス定義内で定義され、全てのメソッドから参照または代入が可能
  • class Class
      # クラス変数
      @@c = 1
      def Method1
        puts @@foo
      end
    
      def Method2(value)
        puts @@c + value
      end
    end
    
    test = Class.new()
    test.Method1
    test.Method2(2)
    
    実行結果
    3
    

グローバル変数

  • $で始まる変数
  • プログラムのどこからでも参照または代入が可能
  • 初期値はnil
  • $g = "グローバル変数"
    
    def hensuu_type
      puts "この変数は #{$g}"
    end
    
    hensuu_type
    
    実行結果
    この変数は グローバル変数 です
    

定数

  • アルファベット大文字 ([A-Z]) で定義 : 最初だけ大文字、全て大文字どちらでもOK
  • 単語の区切りとして_を使用
  • 一度代入後、値を変更可 : 変更できるが上書きや再定義エラーは出る
  • メソッド内では定義不可
  • クラス外からもクラス名::定数名で参照可能
    class Ruby
      COLOR = 'Ruby'
    end
    
    class Go
      COLOR = 'Go'
      COLOR = 'PHP' # 値の上書き
    end
    
    # 定数呼び出し
    p Ruby::COLOR
    p Go::COLOR
    
    実行結果
    const.rb:7: warning: already initialized constant Go::COLOR # 上書きエラー
    const.rb:6: warning: previous definition of COLOR was here # 再定義エラー
    "Ruby"
    "PHP" # 「Go」から「PHP」へ値は変更されてる
    

オブジェクト出力

変数や定数の値を出力することをオブジェクト出力と言います。
オブジェクト出力は、puts, p, printで行いますが各々微妙な違いがあります。

puts

  • オブジェクト末尾に自動的に改行が付与されます
  • 末尾に改行コードがある場合、自動的な改行付与はされません。
  • ''で囲まれている場合、改行コード等のエスケープ文字はそのまま出力されます
    def hello_ruby
        puts "Hello Ruby!"
        puts "Hello Ruby!\n"
        puts 'Hello Ruby!\n'
    end
    
    hello_ruby # メソッド呼び出し
    
    実行結果
    Hello Ruby!
    Hello Ruby!
    Hello Ruby!\n
    

p

  • オブジェクト末尾に自動的に改行が付与されます
  • 文字列は""で囲われて出力されます。
  • ""''に関わらず、改行コード等のエスケープ文字はそのまま出力されます
  • ''で囲まれている場合、\が追加出力されます。
    p "Hello Ruby!"
    p "Hello Ruby!\n"
    p 'Hello Ruby!\n'
    
    実行結果
    "Hello Ruby!"
    "Hello Ruby!\n"
    "Hello Ruby!\\n"
    

print

  • オブジェクト出力時、改行は付与されません
  • ''で囲まれている場合、改行コード等のエスケープ文字はそのまま出力されます
  • print "Hello Ruby!"
    print "Hello Ruby!\n"
    print 'Hello Ruby!\n'
    
    実行結果
    Hello Ruby!Hello Ruby!
    Hello Ruby!\n
    

文字列オブジェクト

  • クラスは String
  • 文字列オブジェクトは、以下方法で作成できます。
    • Stringクラスで用意されているnewメソッド : String.new(文字列)
    • ""または'で文字列を囲む
      def output_string
        puts String.new("Hello Ruby!")
        puts "Hello Ruby!"
      end
      
      output_string
      
      実行結果
      Hello Ruby!
      Hello Ruby!
      

連結

+で文字列同士を連結・出力することができます。

  • フォーマット
    puts 文字列 + 文字列
    
    puts "Hello Ruby" + " Go!"
    
    実行結果
    Hello Ruby Go!
    

式展開

  • ""で囲まれた文字列の中に式を記述することができます。
  • プログラム実行時、式が評価・計算されてその結果が文字列として出力されます。
    フォーマット
    #{式}
    
    print("年齢は #{10 - 5} です")
    
    実行結果
    年齢は 5 です
    

ループ

*を使って、文字列を繰り返し出力することができます。

  • フォーマット
    puts 文字列 * 繰り返し回数
    
    puts "Hello★" * 3
    
    実行結果
    Hello★Hello★Hello★
    

文字数カウント

lengthメソッドで文字数を出力することができます。

  • フォーマット
    puts 文字列.length
    
    str = "Hello Ruby!"
    puts str.length
    
    実行結果
    11
    

文字列から数値へ変換

to_iメソッドを使って、文字列を数値型へ変換することができます。

  • フォーマット
    puts 文字列.to_i
    
    str = "123"
    puts str # 文字列
    puts str.to_i # 数値へ変換
    
    実行結果
    "123"
    123
    

数値オブジェクト

  • 値によってクラスが異なります。
    • Integer(整数)、Float(浮動小数点数)、Complex(複素数)、Rational(有理数)
  • 文字列オブジェクトのように、newメソッドでのオブジェクト作成はできません
  • 整数値は、 2 進数、 8 進数、 16 進数の形式も記述できます。
    10進数  214
    2進数  0b11010110 # 先頭に「0b」が付く
    8進数  0326 # 先頭に0が付く
    16進数  0xD6 # 先頭に「0x」が付く
    
    def output_numeric
      puts 10
      puts 3.14
    end
    
    output_numeric
    
    実行結果
    10
    3.14
    

演算

演算で使用される演算子は以下の通りです。

演算子 意味
+ 加算 2 + 1
- 減算 2 - 1
* 乗算 2 * 1
/ 除算 2 / 1
% 剰余 2 % 1
** 累乗 2 ** 3
  • def calc_numeric
      print("2 + 1 = ", 2 + 1, "\n")
      print("2 - 1 = ", 2 - 1, "\n")
      print("2 * 1 = ", 2 * 1, "\n")
      print("2 / 1 = ", 2 / 1, "\n")
      print("2 % 1 = ", 2 % 1, "\n") # 2 / 1 の余り
      print("2 ** 3 = ", 2 ** 3, "\n") # 2 * 2 * 2
    end
    
    calc_numeric
    
    実行結果
    2 + 1 = 3
    2 - 1 = 1
    2 * 1 = 2
    2 / 1 = 2
    2 % 1 = 0
    2 ** 3 = 8
    

四捨五入 ・ 切り上げ ・ 切り捨て

  • roundメソッド : 四捨五入
  • ceilメソッド : 切り上げ
  • floorメソッド : 切り捨て
    フォーマット
    p (式).round
    p (式).ceil
    p (式).floor
    
    def output_round_ceil_floor
      # 四捨五入、切り上げ、切り捨て
      p 9.0/7
      p (9.0/7).round
      p (9.0/7).ceil
      p (9.0/7).floor
    
      # 出力桁数を指定の上で、四捨五入、切り上げ、切り捨て
      p (9.0/7).round(2)
      p (9.0/7).ceil(3)
      p (9.0/7).floor(5)
    end
    
    output_round_ceil_floor
    
    実行結果
    1.2857142857142858
    1
    2
    1
    1.29
    1.286
    1.28571
    

小数点の出力桁数指定

format, sprintfを使って、小数点の出力桁数を指定することができます。

  • フォーマット
    format("%.桁数f", 対象数値)
    
    def output_format
      calc = 7/6.0
    
      puts format("%.2f", calc)
      puts sprintf("%.2f", calc)
    end
    
    output_format
    
    実行結果
    1.17
    1.17
    

数値から文字列へ変換

to_sメソッドを使って、数値を文字列型へ変換することができます。

  • フォーマット
    puts 数値.to_s
    
    str = 123
    puts str # 数値
    puts str.to_s # 文字列へ変換
    
    実行結果
    123
    "123"
    

比較演算子

文字列または数値オブジェクトは、比較演算子による値の比較が可能です。
比較結果は、true または false で返ってきます。使用される演算子は以下の通りです。

演算子 意味
A == B AとBは等しい
A != B AとBは等しくない
A > B AはBより大きい
A < B AはBより小さい
A >= B AはB以上
A <= B AはB以下

クラス・メソッドの出力

クラスの出力

putspでオブジェクトを出力する際、オブジェクト名の後ろに.classを付けることで、対象オブジェクトのクラスを出力することができます。

  • def output_class
      # 文字列オブジェクト
      puts "Hello Ruby!"
      puts "Hello Ruby!".class
    
      # 数値オブジェクト
      puts 10
      puts 10.class
      puts 3.14
      puts 3.14.class
    end
    
    output_class
    
    実行結果
    Hello Ruby!
    String
    10
    Integer
    3.14
    Float
    

メソッドの出力

オブジェクトを出力する際、オブジェクト名の後ろに.methodsを付けることで、対象オブジェクトのメソッドを出力することができます。

  • def output_method
      # 文字列オブジェクト
      puts "Hello Ruby!"
      puts "Hello Ruby!".methods
    
      # 数値オブジェクト
      puts 10
      puts 10.methods
      puts 3.14
      puts 3.14.methods
    end
    
    output_method
    

※ 実行結果は長いので割愛します。

参考文献

プログラミング言語 Ruby リファレンスマニュアル
【Ruby】基本コマンド一覧
文字列オブジェクトを作成する
数値オブジェクトを使用する
【Ruby入門】クラスメソッドの使い方|呼び出し・その他メソッド

0
1
0

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
1