Ruby
 Computer >> コンピューター >  >> プログラミング >> Ruby

Rubyの強力なメソッド引数とそれらを正しく使用する方法

キーワード引数をいつ使用するかについて意見を求めるメールが届きました。

答えをRubyメソッドの引数に関する完全な記事に拡張して、誰もが恩恵を受けることができるようにすると思いました。 !

Rubyは、メソッド引数に関しては非常に柔軟性があります。

すべてが揃っています

標準の必須引数からオプションの引数、さらにはキーワード(名前付き)引数まで。

この記事では、違いについて学びます これらすべての引数タイプの間で、状況に応じてどのタイプを使用するか。

適切な種類の引数を使用すると、コードが読みやすくなり、操作しやすくなります。

疑わしい場合は標準の引数を使用してください

必須の引数は、デフォルトで取得されるものです。

ここに例があります

def write(file, data, mode)
end

write("cats.txt", "cats are cool!", "w")

必要な引数の正確な数を渡さないと、次のようなおなじみのエラーメッセージが表示されます。

write("shopping_list.txt", "bacon")

ArgumentError: wrong number of arguments (2 for 3)

これは、メソッド2を指定したことを意味します 引数ですが、3が必要です !

オプションの引数を使用した柔軟なメソッド

デフォルト値を指定して、引数の一部をオプションにすることができます。

def write(file, data, mode = "w")
end

これで、writeを呼び出すことができます 2つの引数があり、その場合はmode デフォルト値と等しくなります("w" )、または3つの引数を渡してデフォルト値を上書きし、異なる結果を得ることができます。

このデフォルト値を使用すると、このメソッドを呼び出す際の作業を節約しながら、変更するオプションを利用できます。

キーワード引数を使用して明確さを高める

必須およびデフォルトの引数の欠点の1つは、順序に依存することです。

同じ順序で引数を渡す必要があることを意味します

間違った順序で渡す場合

予期しない結果が得られます!

たとえば、write メソッドの場合は、fileを使用して呼び出す必要があります 最初にdata &最後にmode

def write(file, data, mode)
end

キーワード引数を使用すると、引数の順序を変えることができます。

ここに例があります

def write(file:, data:, mode: "ascii")
end

これにより、メソッドを別の順序で呼び出すことができます。

write(data: 123, file: "test.txt")

しかし、もっと重要なことは、メソッドを呼び出すと、引数の意味をはっきりと確認できることです。 。

キーワード引数を頻繁に使用することはありませんが、メソッド呼び出しを明確にしたい場合に役立ちます。

Pointがあるとしましょう クラス。

このように書くことができます

class Point
  def initialize(x: , y:)
    @x, @y = x, y
  end
end

point = Point.new(x: 10, y: 20)

このようにして、2つの数字(10と20)のどちらがxに対応するかについて混乱する可能性はありません。 値またはy 値。

これは、コードを作成する際の主な目標の1つであり、混乱や誤解をできるだけ避けることです。 。

キーワード引数を使用するとそれが役立つ場合は、それらを使用してください。

これについて考えてください

「キーワード引数を追加すると、これが理解しやすくなりますか、それともコードに余分な作業と混乱が追加されますか?」

キーワード引数についてのもう1つの点は、欠落している引数について非常に明確であるということです。

point = Point.new

# missing keywords: x, y

キーワード引数を通常の引数と組み合わせることもできます。

Rubyの組み込みメソッドで私が観察してきた戦略の1つは、新しいバージョンでは、キーワード引数として新しいオプションの引数が追加される傾向があるということです。 。

この例は、Float#roundのキーワード引数です。 、Kernel#cloneString#lines Ruby2.4で導入されました。

変数引数を使用して、必要な数の値をキャプチャします

無制限の値を取得したい場合はどうなりますか?

次に、可変引数を使用できます :

def print_all(*args)
end

print_all(1, 2, 3, 4, 5)

これにより、引数なしを含む任意の数の引数を使用してメソッドを呼び出すことができます。可変引数は、すべての値が渡された配列です。

これを他のタイプの引数と組み合わせることができます。

def print_all(title, *chapters)
end

これは、最初の引数をtitleとして受け取ります 、残りはchapters 配列。可変引数はである必要があることに注意してください すべての必須およびオプションの引数、およびキーワード引数の前。

正しい順序を使用する

引数を組み合わせて構文エラーを回避する場合の有効な引数の順序は次のとおりです。

required -> optional -> variable -> keyword

考えられるすべての引数タイプを表示するメソッドは次のとおりです

def testing(a, b = 1, *c, d: 1, **x)
  p a,b,c,d,x
end

testing('a', 'b', 'c', 'd', 'e', d: 2, x: 1)

**x 変数引数と同じですが、キーワード引数用です。配列ではなくハッシュになります。

キャッチオール引数

まれに、これが表示される場合があります:

def print_all(*)
end

これは、メソッドが引数を受け入れているが、それらに対して何もしていないことを意味します。アンダースコア文字(_)を使用するのと似ています )ブロック内で、使用していない引数を示します。

これの実用的な使用法は、スーパーキーワードと組み合わせることができます:

class Food
  def nutrition(vitamins, minerals)
    puts vitamins
    puts minerals
  end
end

class Bacon < Food
  def nutrition(*)
    super
  end
end

bacon = Bacon.new

bacon.nutrition("B6", "Iron")

さて、食品のnutrition 引数リストを変更します。Baconの引数を変更する必要はありません

概要

Rubyの強力なメソッド引数とその使用方法について学習しました。必須の引数は良いスタートです。オプションの引数で柔軟性を追加し、キーワードの引数で明確さを追加できます。

これがお役に立てて面白いと思います!

この投稿をTwitterで共有して、より多くの人に見てもらいましょう🙂


  1. Ruby Mapメソッドの使用方法(例付き)

    Mapは、配列、ハッシュ、範囲で使用できるRubyメソッドです。 マップの主な用途は、データを変換することです。 例 : 文字列の配列が与えられた場合、すべての文字列に目を通し、すべての文字を大文字にすることができます。 または、Userのリストがある場合 オブジェクト… 変換できます 対応するメールアドレス、電話番号、またはその他の属性のリストにそれらを追加します Userで定義 クラス。 これを行う方法を正確に見てみましょう! ルビーマップ構文 マップの構文は次のようになります: array = [a, b, c] array.map { |string| string.

  2. RubyでStructとOpenStructを使用する方法

    Rubyの構造体とは何ですか? 構造体は組み込みのRubyクラスであり、値オブジェクトを生成する新しいクラスを作成するために使用されます。値オブジェクトは、関連する属性を一緒に格納するために使用されます。 ここに例があります : Point 2つの座標(x &y 。 このデータはさまざまな方法で表すことができます。 いいね : 配列[10, 20] ハッシュ{ x: 10, y: 10 } オブジェクトPoint.new(10, 20) 複数のPointを使用する場合 、オブジェクトアプローチを使用することをお勧めします。 しかし… これら2つの値を一緒に格納するた