Ruby学習の方法とブロックの定義と使用


Rubyのメソッドは他のプログラミング言語の関数と似ています.主に1つ以上の繰り返し文を1つのユニットにバンドルするために使用されます.名前は小文字で始まり、大文字で始まると定数とみなされる可能性があります.一方、メソッドは呼び出し前に定義する必要があります.そうしないと、Rubyは未定義のメソッド呼び出し異常を発生します.方法の定義を見てみましょう.
#    
def method_name 
   expr..
end

#   
def method_name (var1, var2)
   expr..
end

#      ,       
def method_name (var1=value1, var2=value2)
   expr..
end

呼び出しの仕方も簡単です.次のようになります.
#    
method_name

#   
method_name 25, 30

パラメータ付きメソッドを使用する最大の欠点は、メソッドを呼び出すときにパラメータの数を覚えることです.たとえば、3つのパラメータを受け入れる方法に2つのパラメータしか渡さない場合、Rubyはエラーを表示します.次の例を見てみましょう.
#!/usr/bin/ruby
# -*- coding: UTF-8 -*-
 
def test(a1="Ruby", a2="Perl")
   puts "      #{a1}"
   puts "      #{a2}"
end
test "C", "C++"
test

Rubyの各メソッドはデフォルトで値を返します.この返される値は、最後の文の値です.メソッドを見てみましょう.
def test
   i = 100
   j = 10
   k = 0
end

このメソッドを呼び出すと、最後に宣言された変数kが返されます.
Rubyメソッドには、1つ以上の値を返すreturn文があり、2つ以上の式が与えられると、これらの値を含む配列が戻り値になります.式が指定されていない場合、nilは戻り値になります.例を見てみましょう.
#!/usr/bin/ruby
# -*- coding: UTF-8 -*-
 
def test
   i = 100
   j = 200
   k = 300
return i, j, k
end
var = test
puts var

2つのパラメータを持つメソッドを宣言した場合、呼び出し時に2つのパラメータを渡す必要があります.この場合、Rubyはパラメータの数を可変と宣言できます.次の例を見てみましょう.
#!/usr/bin/ruby
# -*- coding: UTF-8 -*-
 
def sample (*test)
   puts "      #{test.length}"
   for i in 0...test.length
      puts "     #{test[i]}"
   end
end
sample "Zara", "6", "F"
sample "Mac", "36", "M", "MCA"

上記のコードでは、パラメータtestを受け入れる方法sampleを宣言しました.しかし、このパラメータは変数パラメータです.これは、パラメータが異なる数の変数を持つことができることを意味します.
メソッドがクラスの外部に定義され、デフォルトではprivate、クラスではpublicと表記されます.デフォルトの可視性とprivateタグはモジュールのpublicまたはprivateで変更できます.クラスにアクセスする方法は、まずクラスをインスタンス化する必要があります.その後、オブジェクトを使用してクラスの任意のメンバーにアクセスできます.また、Rubyはインスタンス化せずにアクセスできる方法を提供しています.クラスメソッドを宣言してアクセスする例を見てみましょう.
class Accounts
   def reading_charge
   end
   def Accounts.return_date
   end
end

我々はすでに方法を知っています.dateはどのように宣言されますか.クラス名の後にポイント番号、ポイント番号の後にメソッド名が付いて宣言されます.クラスメソッドに直接アクセスできます.以下に示します.
Accounts.return_date

このメソッドにアクセスするには、クラスAccountsのオブジェクトを作成する必要はありません.
メソッドまたはグローバル変数に別名を付けるために使用されるalias文を見てみましょう.別名はメソッドボディ内で定義できません.メソッドが書き換えられても、メソッドの別名はメソッドの現在の定義を保持します.番号付きグローバル変数($1,$2,...)別名をつけることは禁止されています.組み込まれたグローバル変数を書き換えると、深刻な問題が発生する可能性があります.構文フォーマットを見てみましょう.
alias        
alias          

例は次のとおりです.
alias foo bar
alias $MATCH $&

上記のコードでは、barの別名をfoo、$&の別名を$MATCHと定義しています.
メソッド定義をキャンセルし、メソッド本体に表示されないundef文もあります.undefとaliasを使用すると、クラスのインタフェースは親から独立して変更できますが、独自の内部メソッド呼び出し時にプログラムを破壊する可能性があります.実例を見てください.
#  
#undef    
#     bar       
undef bar

上記の説明が終わったら、次のブロックの概念を見てみましょう.
  • ブロックは、大量のコードから構成される.
  • は、ブロックに名前を付ける必要があります.
  • ブロックのコードは、常にカッコ{}内に含まれます.
  • ブロックは、常に同じ名前の関数から呼び出される.これは、ブロック名がtestの場合、関数testを使用してブロックを呼び出すことを意味します.
  • は、yield文を使用してブロックを呼び出すことができる.

  • 構文は次のとおりです.
    block_name{
       statement1
       statement2
       ..........
    }

    まずyield文の例を見てみましょう.
    #!/usr/bin/ruby
    # -*- coding: UTF-8 -*-
     
    def test
       puts "  test    "
       yield
       puts "      test    "
       yield
    end
    test {puts "    "}

    パラメータ付きyield文をインスタンスとして渡すこともできます.
    #!/usr/bin/ruby
    # -*- coding: UTF-8 -*-
     
    def test
       yield 5
       puts "  test    "
       yield 100
    end
    test {|i| puts "    #{i}  "}

    上記のコードでは、yield文の後にパラメータが付いており、複数のパラメータを渡すこともできます.ブロックでは、2つの縦線の間に変数を配置してパラメータを受け入れることができます.したがって、上記のコードでは、yield 5文はtestブロックに値5をパラメータとして伝達する.
    次の文を見てみましょう.
    test {|i| puts "    #{i}  "}

    上記のコードでは、値5は変数iで受信されます.次に、次のputs文を観察します.
    puts "    #{i}  "

    上記のコードは「ブロック5内にいる」と出力されます.複数のパラメータを渡す場合は、yield文は次のようになります.
    yield a, b

    この場合、ブロックは以下のようになります.
    test {|a, b| statement}

    パラメータはカンマで区切りましょう.
    通常、yield文を使用して、同じ名前のメソッドからブロックを呼び出します.例は次のとおりです.
    #!/usr/bin/ruby
     
    def test
      yield
    end
    test{ puts "Hello world"}

    上記のコードはブロックを実現する最も簡単な方法であるが、方法の最後のパラメータが前に&を持っている場合、私たちはこの方法にブロックを渡すことができ、このブロックは最後のパラメータに付与することができ、*と&が同時にパラメータリストに表示される場合、&は後ろに置いて、例を見てください.
    #!/usr/bin/ruby
     
    def test(&block)
       block.call
    end
    test { puts "Hello World!"}

    各Rubyソースファイルは、ファイルがロードされたときに実行されるコードブロック(BEGINブロック)と、プログラムの実行が完了した後に実行されるコードブロック(ENDブロック)とを宣言することができ、1つのプログラムは、複数のBEGINおよびENDブロックを含むことができる.BEGINブロックは、それらが現れる順に実行される.ENDブロックは、それらが現れる逆の順序で実行され、次の例を見てみましょう.
    #!/usr/bin/ruby
     
    BEGIN { 
      # BEGIN    
      puts "BEGIN    "
    } 
     
    END { 
      # END    
      puts "END    "
    }
      # MAIN    
    puts "MAIN    "

    はい、今回の記録はここまでです.
    いい感じだったら、応援よろしくね..