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

ニルについて知っておくべきことすべて

なし…

本当に何ですか?

ええと、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オブジェクトです。

また、nilfalse Rubyで「偽物」であるのは2つだけです。他のすべては「真実」です。

この投稿を楽しんだら、共有することを忘れないでください お気に入りのソーシャルネットワークでそれを!


  1. Bluetooth 5 について知っておくべきことすべて

    Wi-Fi と同様に、Bluetooth はモバイルやその他のデバイスに不可欠な要素です。ファイルやデータの転送に使用されるだけでなく、スピーカー、スポーツ イヤホンなどのワイヤレス デバイスを接続することもできます。 Bluetooth は通信の方法を変えただけでなく、多くのデバイスをかさばるものからコンパクトなものに変えました。この新しいバージョンの Bluetooth では、以前のバージョンではできなかった多くのことが可能になります。ただし、新しいバージョンはそれほど例外的ではありません。しかし同時に、それはまだいくつかの新鮮なものをテーブルにもたらします.それでは、何が用意されている

  2. PBM ファイルについて知っておくべきことは?

    コンピューターが親しみやすいものになって以来、テクノロジーとエンターテインメントの分野で顕著な成長を目の当たりにすることができます。娯楽の最も一般的なソースの 1 つは、写真やその他のメディアです。ただし、現在のテクノロジでは、ファイルをサポートできる特定のツールを開くために正しいプログラムを選択する必要はありません。ただし、画像とその他のメディア ファイルは同じファイル タイプではなく、さまざまな拡張子が関連付けられていることを知っておくとよいでしょう。そのような拡張子の 1 つは、しばらくの間ユーザーの間で人気を集めている PBM ファイル拡張子です。今日は、PBM ファイルとその実行方法