ニルについて知っておくべきことすべて
なし…
本当に何ですか?
ええと、nil
「空」または「デフォルト」値を表すために使用される特別なRubyオブジェクトです。これは「偽の」値でもあり、false
のように動作することを意味します 条件文で使用する場合。
今 :
nil
は1つだけです object_id
を持つオブジェクト 4
の (または8
64ビットRubyの場合)、これがnil
の理由の一部です。 特別です。
nil.object_id # 4
もっと詳しく見てみましょう!
ゼロ値はどこから来るのですか?
多くのメソッドはnil
を返すことができます 結果として。
これは、値を要求したが、その値が利用できない場合に発生します。
例 :
- 製品が見つかりません
- 配列インデックスが範囲外です
- ハッシュキーは存在しません
これを示すためのコードがいくつかあります :
arr = [1,2,3] arr[5] # nil
呼び出したメソッドがnil
ではなく有効な値を返すことを期待しているため、これは多くの場合、あらゆる種類の問題につながります。 。
このようにNoMethodError
例外:
arr[5].size # NoMethodError: undefined method 'size' for nil:NilClass
このエラーを回避するには、nil
があるかどうかを確認する必要があります メソッドを呼び出す前の値。
RubyでのNilのテスト
「nil:NilClassの未定義のメソッド」エラーが発生したくない場合は、これを試してください…
nilでない場合にのみメソッドを呼び出す :
if array[5] && array[5].size # do something... end
これが、Ruby 2.3が「安全なナビゲーター」演算子(&.
)を導入した理由です。 。
例 :
if arr[5]&.size # do something... end
nilをテストする別の方法は、nil?
を使用することです。 方法:
if @bacon.nil? # ... end
もう1つのオプションは、blank?
を使用することです。 メソッド(レールのみ)。
使用しているオブジェクトに応じて、nil
のチェックを回避するために使用できるいくつかの手法があります。 完全に価値観。
たとえば、fetch
を使用できます ハッシュおよび配列オブジェクトのメソッド。
または、nil
の代わりにデフォルト値を返したい場合は、独自のクラスで「NullObjectPattern」を使用できます。 。
ニルが潜んでいる他の場所
未定義のインスタンス変数はnil
を返すことに注意してください。 。
@foo # nil
したがって、注意してください。インスタンス変数の名前のスペルを間違えたり、初期化するのを忘れたりする可能性があります。
nil
を見つけることができる別の場所 puts
を使用します &print
メソッド。
これらの2つのメソッドは、常にnil
を返します。 。
私の生徒の何人かがこのようなことを試みているのを見たので、私はこれに言及します:
numbers = [1,2,3].map { |n| puts n * 2 }
結果としてnumbers
[nil, nil, nil]
であること 。この場合の解決策は、単にputs
を削除することです。 ブロックの内側から。
NilClassについて
他のRubyオブジェクトと同じようにnil
一連のメソッドがあります。
Rubiniusのクラス定義は次のとおりです。
class NilClass def to_s "" end def inspect "nil" end def nil? true end def to_a [] end def to_f 0.0 end def to_i 0 end def to_c Complex(0) end def to_h {} end end
これらすべてのto_something
メソッドは空の値を返します(0
数字の場合)。
空のハッシュ、空の文字列、空の配列…
この理由は、nil
「何もない」ことを表すために使用されます。
ヌルオブジェクトパターン
nil
についての議論はありません NullObjectPatternに言及せずに完了します。
彼女の素晴らしい講演「NothingisSomething」で、SandiMetzはnil
「何もない」という意味で、より具体的な意味を持つことができます。
たとえば、商品を検索するメソッドを作成し、デフォルトの商品を返したい場合…
このようなnull商品を返品できます :
class MissingProduct def name "Product not found" end end
これで、実際の商品オブジェクトとnull商品が混在する配列がある場合、これらの商品はすべてname
になります。 方法。これは、NoMethodError
を取得しないことを意味します 例外。
ヒント :オブジェクトタイプをチェックせずにすべてのオブジェクトを同じように扱うことができる場合は、ポリモーフィズムを利用しています。
これらの種類のオブジェクトはプレゼンテーション層には最適ですが、アラートメッセージの表示やリダイレクトなど、探しているものが利用できない場合に別のことをしたいコントローラーにはあまり適していません。
真実
nil
について知っておくべきもう1つのこと false
以外の唯一の値であるということです (これもオブジェクトです)、これは「偽物」と見なされます。
Rubyの他のすべてはtrue
と見なされます ブール値のコンテキストで。
一部の言語では、0
という数字が考慮されます false
として 価値がありますが、Rubyではそうではありません:
if 0 puts 123 end # 123
これは、「0
の場合 true
です 次に、123
を印刷します 「。
ビデオ
概要
nil
「何もない」を表す単なるRubyオブジェクトです。
また、nil
&false
Rubyで「偽物」であるのは2つだけです。他のすべては「真実」です。
この投稿を楽しんだら、共有することを忘れないでください お気に入りのソーシャルネットワークでそれを!
-
Bluetooth 5 について知っておくべきことすべて
Wi-Fi と同様に、Bluetooth はモバイルやその他のデバイスに不可欠な要素です。ファイルやデータの転送に使用されるだけでなく、スピーカー、スポーツ イヤホンなどのワイヤレス デバイスを接続することもできます。 Bluetooth は通信の方法を変えただけでなく、多くのデバイスをかさばるものからコンパクトなものに変えました。この新しいバージョンの Bluetooth では、以前のバージョンではできなかった多くのことが可能になります。ただし、新しいバージョンはそれほど例外的ではありません。しかし同時に、それはまだいくつかの新鮮なものをテーブルにもたらします.それでは、何が用意されている
-
PBM ファイルについて知っておくべきことは?
コンピューターが親しみやすいものになって以来、テクノロジーとエンターテインメントの分野で顕著な成長を目の当たりにすることができます。娯楽の最も一般的なソースの 1 つは、写真やその他のメディアです。ただし、現在のテクノロジでは、ファイルをサポートできる特定のツールを開くために正しいプログラムを選択する必要はありません。ただし、画像とその他のメディア ファイルは同じファイル タイプではなく、さまざまな拡張子が関連付けられていることを知っておくとよいでしょう。そのような拡張子の 1 つは、しばらくの間ユーザーの間で人気を集めている PBM ファイル拡張子です。今日は、PBM ファイルとその実行方法