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

attr_accessor、attr_writer、attr_readerの使用方法

この記事は、属性アクセサー(attr_accessor)に関するものです。 )Rubyで。

お急ぎの場合は、下にスクロールしてください。

説明から始めたいので:

属性アクセサーを使用する理由

インスタンス変数を持つクラスがあり、それらを外部に公開したいとします。

どうやって?

メソッドを定義する必要があります。

インスタンス変数にアクセスできるのはメソッドのみです。

なぜですか?

これを行わないとエラーが発生するためです。

ここに例があります

class Food
  def initialize(protein)
    @protein = protein
  end
end

bacon = Food.new(21)
bacon.protein

# NoMethodError: undefined method `protein'

NoMethodError proteinの値を尋ねたときに発生するエラーです 適切な設定なし。

解決策は何ですか?

このように独自のメソッドを定義できます

class Food
  def protein
    @protein
  end
end

bacon.protein
# 21

他のOOP言語では、これは「ゲッター」メソッドとして知られています。インスタンス変数の値を取得するメソッドを定義します。

値を変更することもできます。

そのためには、別の方法が必要です 、このように:

class Food
  def protein=(value)
    @protein = value
  end
end

bacon.protein = 25

値を変更できるように、オブジェクトへのポータルを開いていると想像してください。

それがこれが行っていることです。

この種のメソッドを定義するためのより良い方法はありますか?

ある種のショートカットが好きですか?

はい!

🙂

があります

ここでattr_accessor 入ってくる。

Rubyattr_accessorの例

attr_accessorを使用して、これらのメソッドを作成するようにRubyに指示できます。 。

方法は次のとおりです

class Food
 attr_accessor :protein

 def initialize(protein)
   @protein = protein
 end
end

この行を見てください

attr_accessor :protein

これは、他のメソッドを作成するRubyメソッドです。

どのような方法ですか?

この例では、以下を作成します:

  • protein
  • protein=

これらは以前に作成したものと同じメソッドです…

しかし、今ではそれらを入力する必要はありません。

近道です!

attr_accessor vs attr_reader

attr_accessorの他に 、他の種類のアクセサーもあります。

正確には3つ

  • attr_accessor
  • attr_reader
  • attr_writer

それらの違いは何ですか?

そうですね、attr_accessorはREADERメソッドとWRITERメソッドの両方を作成します。

  • attr_reader リーダーのみを作成します。

  • attr_writer ライターのみを作成します。

言い換えれば

attr_readerを使用 値を読み取ることはできますが、変更することはできません。 attr_writerを使用 値を変更することはできますが、読み取ることはできません。

複数のインスタンス変数

複数の属性メソッドを定義したいですか?

あなたはそれを行うことができます。

ただし、正しい構文を使用する必要があります。

このように

attr_reader :name, :value, :ready?

いくつでも作成できます。

ビデオチュートリアルを見る

概要

Rubyの属性アクセサーについて学習しました。 3つのメソッドのセット(attr_accessorattr_writerattr_reader )クラスの外部からインスタンス変数にアクセスして設定します。

さあ、練習しましょう。


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

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

  2. RailsアプリケーションでOmniAuth-Twitterを使用する方法

    このチュートリアルでは、アプリケーションのユーザーがTwitterアカウントを使用してログインできるようにする方法を学習します。これを行うには、OAuthなどのツールを使用すると簡単になります。 OmniAuthのTwitter戦略を含むOmniAuth-Twitterを利用します。 飛び込みましょう! はじめに Railsアプリケーションを生成することから始めます。ターミナルから、コマンドを実行して実行します。 rails new Tuts-Social -T Gemfileを開き、ブートストラップgemを追加します。 #Gemfile...gem bootstra