将来を見据えたウェブ・アプリケーションの構築:The Codestのエキスパート・チームによる洞察
The Codestが、最先端技術を駆使してスケーラブルでインタラクティブなウェブアプリケーションを作成し、あらゆるプラットフォームでシームレスなユーザー体験を提供することにどのように秀でているかをご覧ください。The Codestの専門知識がどのようにデジタルトランスフォーメーションとビジネス...
Rubyの最も愛されている特徴のひとつに、非常に柔軟な構文がある。個人的には、クラスとそのプロパティを定義する際の可能性の多さがRubyの魅力であり、この記事で取り上げるのはその点だ。
パブリック・メソッドとプライベート・メソッドを1つずつ持つクラスFooを使っているとしよう:
クラス Foo
def bar
:awesome
終了
プライベート
def baz
:something_private
終了
終了
このような解決策は、事実上あらゆるところで目にすることができる。 プロジェクト.ランニング Foo.new.baz
というエラーが発生します。 NoMethodError (プライベートメソッド 'baz' が # 用に呼び出された) それが私たちの意図したことです。保存形式を変更し、クラス定義の接頭辞にprivateを追加しようとしたらどうなるでしょうか?
クラス Foo
def bar
:awesome
終了
private def baz
:something_private
終了
終了
を実行した後、おわかりのように コードそれは実際に機能する!なぜメソッドを実行する前にメソッドの可視性を入力できるのか?なぜなら、メソッドを定義するとき、defはメソッドの名前をシンボルとして返すからだ。この式は構文の一部であるだけでなく、事実上モジュール・クラスから派生したメソッドであり、このシンボルを引数として扱います。詳しくは、ドキュメント このリンク.privateで簡単に始まったので、privateメソッドの可視性を変更してみよう。
クラス Foo
def bar
:awesome
終了
private def baz
:something_private
終了
public :baz
終了
irb(main):012:0> Foo.new.baz
=> :something_private
成功!ベースのメソッドがパブリックになった。もちろん、同じ操作がモジュールにも適用される。
でも、それでどうなるんだ?
この機能により、メソッドを定義する際にそのメソッドの可視性を自由に変更したり、メソッドを継承する際にそのメソッドの可視性を変更したりすることができる。
では、Ruby 2.7でエイリアスとアクセサの可視性を変更することで何ができるかを見てみましょう。
クラス Foo
private attr_accessor :awesome_variable
終了
残念ながら、privateメソッドはsymbolsとattr_accessorを期待しているため、エラーが発生する。このコードはnilを返すので、このメソッドはRuby 2.7のprivateメソッドと互換性がありません。では、どのような選択肢があるのだろうか?
すごい変数すごい変数
メソッドを使用する。クラス Foo
プライベート
attr_accessor :awesome_variable
終了
属性
この場合、セッターを入力することも忘れてはならない。クラス Foo
attr_accessor :awesome_variable
プライベート :awesome_variable, :awesome_variable=
終了
の問題点 attr_ *.
メソッドだけが障害ではない。プライベート・エイリアスを作りたいときにも、同じ困難に遭遇する。
クラス Foo
プライベートエイリアス :bar, :awesome_bar
終了
幸いなことに、Ruby 3.0ではvisibilityメソッドが配列を引数に取ることができるようになり、メソッドのエイリアスであるattr_ *が定義されたメソッド名で配列をリセットできるようになりました。詳しくは これ.
では、最新のユーバでいくつかの例を見て、実際に変更が加えられたかどうか、そしてそれをどのように使えるかをチェックしてみよう。
最初の例では、attrアクセサの前にprivateを使ってみよう:
クラス Foo
private attr_accessor :awesome_variable
終了
このような呼び出しは構文の解析でエラーを起こさない。 すごい変数
そしてすごい変数
メソッドはプライベートになる。
エイリアス・メソッドは、新しいメソッドの名前としてシンボルを返し、それを可視化する。
クラス Foo
プライベートエイリアス :bar, :awesome_bar
終了
興味深い事実は、さらなるメソッドを掘り下げることもできるということだ。printモジュールは、privateとattrの間で呼び出すことができる。このようなメソッドは、式の右側にあるメソッド名を配列にして返すことが重要である。
クラス Module
def awesome_print(names)
名前を入れる
名前
終了
終了
クラス Foo
private awesome_print attr_reader :awesome_bar
終了
この記事がお役に立つことを願っています!Ruby 3.0に関するその他のニュースについては、続きをお読みください。 これ.
ハッピーなコーディングだ!
続きを読む