রুবিতে শূন্য বনাম ফাঁকা বনাম কীভাবে বুঝতে হয় understand


1128

আমি নিজেকে বারবার পার্থক্য সুস্পষ্ট সংজ্ঞা খুঁজছেন খুঁজে nil?, blank?এবং empty?পাগল নেভিগেশন রুবি হবে। আমি এখানে এসেছি সবচেয়ে কাছাকাছি:

  • blank?বস্তুগুলি মিথ্যা, খালি বা একটি সাদা স্থানের স্ট্রিং। উদাহরণস্বরূপ, "", " ", nil, [], এবং {}ফাঁকা আছে।

  • nil? অবজেক্টগুলি নীলক্লাসের উদাহরণ।

  • empty?অবজেক্টগুলি শ্রেণিবদ্ধ, এবং সংজ্ঞাটি শ্রেণী থেকে পৃথক পৃথক হয়। কোনও অক্ষর না থাকলে একটি স্ট্রিং ফাঁকা থাকে এবং এতে কোনও আইটেম না থাকলে একটি অ্যারে খালি থাকে।

অনুপস্থিত কিছু আছে, বা একটি শক্ত তুলনা করা যেতে পারে যে?


26
একটি গ্যাচা খালি অ্যারে এর জন্য প্রত্যাখ্যান present?। কোনটি কারণ blank?খালি অ্যারের জন্য সত্য ফিরে আসে।
ক্রিস

4
এক চমৎকার জিনিস দেখতে হয় :nil?উপর সংজ্ঞায়িত করা হয় ::Kernelএবং এর ওভাররাইড ::NilClassসময়, :empty?অনেক ক্লাস উপর আলাদাভাবে বাস্তবায়িত হয় (স্থানীয়ভাবে উপর ::String, ::Array, ::Hash, এবং অ নেটিভ মত অন্য ক্লাসের উপর ::Setstdlib থেকে এবং ::ActiveRecord::Relationপাগল থেকে)। সুতরাং :nil?সব উপশ্রেণী পাওয়া যায় ::Objectএবং প্রতি বর্গ যে অন্তর্ভুক্ত ::Kernel, যেখানে নিজে :empty?আপনার ক্লাসের বাস্তবায়ন বা অন্তর্ভুক্ত করতে হবে বিশেষভাবে।
পুনর্লিখিত

আপনি যদি পুরো nilধারণাটি বোঝার চেষ্টা করেন তবে এখানে শুরু করুন
টটিমেডলি

[1] pry(main)> [].blank? => true
মাইকেল

উত্তর:


1436

.nil? যে কোনও বস্তুতে ব্যবহার করা যেতে পারে এবং যদি বস্তুটি শূন্য থাকে তবে সত্য।

.empty? স্ট্রিং, অ্যারে এবং হ্যাশগুলিতে ব্যবহার করা যেতে পারে এবং সত্যটি ফিরে আসে যদি:

  • স্ট্রিং দৈর্ঘ্য == 0
  • অ্যারের দৈর্ঘ্য == 0
  • হ্যাশ দৈর্ঘ্য == 0

চলমান .empty?কিছু যে শূন্য একটি নিক্ষেপ করা হবে তার উপর NoMethodError

এটিই সেখানে .blank?আসে It এটি রেলগুলি দ্বারা প্রয়োগ করা হয় এবং যে কোনও বস্তুর উপর কাজ করবে পাশাপাশি .empty?স্ট্রিং, অ্যারে এবং হ্যাশগুলির মতো কাজ করবে ।

nil.blank? == true
false.blank? == true
[].blank? == true
{}.blank? == true
"".blank? == true
5.blank? == false
0.blank? == false

.blank? স্ট্রিংগুলির ক্ষেত্রে সত্যটি মূল্যায়ন করে যা খালি নয়, তবে কেবল শ্বেতস্থান থাকে:

"  ".blank? == true
"  ".empty? == false

রেলগুলিও সরবরাহ করে .present? , যা প্রত্যাখ্যান করে .blank?

অ্যারে গেটচা: অ্যারের সমস্ত উপাদান ফাঁকা থাকলেও blank?ফিরে আসবে । এই ক্ষেত্রে blankness, ব্যবহার নির্ধারণ করতে সঙ্গে , উদাহরণস্বরূপ:falseall?blank?

[ nil, '' ].blank? == false
[ nil, '' ].all? &:blank? == true 

27
প্রশ্নে উল্লিখিত হিসাবে কিছু খালি খালি স্ট্রিং ফাঁকা হিসাবে গণনা করে।
অ্যান্ড্রু গ্রিম

1
তারা শূন্যের .empty ওভাররাইটার করে না কেন? তারা .blank যোগ করতে পারে?
এখনও

6
এছাড়াও:false.blank? == true
শ্যানন

2
আমি উল্লেখ করব presence!
মার্ক-আন্দ্রে লাফোর্টুন

2
টম তার উত্তরে উল্লেখ করছেন এমন সমস্ত ফাঁকা-অ্যারে গোছা সংযোজন হিসাবে, সচেতন হন যে এটি সুরক্ষার সমস্যাগুলির দিকে নিয়ে যেতে পারে যেখানে আক্রমণকারী অপ্রত্যাশিত কোড ব্যবহার করতে পারে যা প্যারাম.এনিল না করে কেবল যাচাই করে? বা প্যারাম.ব্ল্যাঙ্ক ছাড়া ?, এবং এটি বর্তমানে রায়লে প্রচুর আলোচনার এবং কাজ করার কারণ। আরও তথ্যের জন্য এখানে দেখুন: github.com/rails/rails/issues/13420
Houen

674

আমি সমস্ত কেস দিয়ে এই দরকারী টেবিল তৈরি করেছি:

এখানে চিত্র বর্ণনা লিখুন

blank?, present?রেল দ্বারা সরবরাহ করা হয়।


57
এটা ফাঁকা লক্ষ করা উচিত? এবং উপস্থিত? কেবলমাত্র কারাগার। তারা ব্যতিক্রম ফিরে আসে: রুবি ২.০.০ এ নোমথোডেরর।
লোনি এলোয়াস

17
any?আপনি যদি কখনও টেবিল আপডেট করেন তবে যুক্ত করার বিষয়টি বিবেচনা করুন ।
ডেনিস

blank?এবং present?" কেবলমাত্র রেলগুলি" নয়, তারা স্বয়ংক্রিয়ভাবে রেলগুলি দ্বারা অন্তর্ভুক্ত হয়ে গেছে তবে অ্যাক্টিভসপোর্টের কোর এক্সটেনশানগুলি ব্যবহার করে সহজেই নন-রেল কোডগুলিতে অন্তর্ভুক্ত হতে পারে। Stackoverflow.com/questions/4238867/…
টিন ম্যান

215

জুলিয়ানের টেবিলটি কেবল প্রসারিত করুন:

এখানে চিত্র বর্ণনা লিখুন

রেফারেন্স: খালি? খালি? শিল? 傻傻 分不清楚


1
@ সিভাভিন ওয়াং, আমি এই টেবিলটি ডাউনলোড করেছি এবং এটি আমার উত্তরগুলিতে আপনাকে ক্রেডিট যুক্ত করে ব্যবহার করেছি। আশা করি আপনি আপত্তি করবেন না :) এই মহান প্রচেষ্টা কুডোস!
লাহিরু

1
Enumerable#any?ভ্যানিলা রুবি, এটি "কেবল
রেলগুলি

1
@ ডানিরো আপনার স্মরণ করিয়ে দেওয়ার জন্য ধন্যবাদ, টেবিলটি আপডেট করা হয়েছে।
সিবিভিন ওয়াং

সংখ্যাযুক্ত প্রকারেরও রয়েছে .zero?এবং.nonzero?
ডেভমঙ্গুজ 9'17

63

দ্রুত নির্দেশনা: !obj.blank? == obj.present?

কিছু অভিব্যক্তিতে চোখের উপর সহজ / সহজ হতে পারে


আপত্তি.নিলের সমান কিছু আছে কি?
কির্ক

present?: active_support অংশ, এটা কি পেতে অন্তর্ভুক্ত করা এখানে চেক stackoverflow.com/a/4648704/1569
ফ্যাক্টর মিস্টিক

2
@ কিরক: !! আপত্তি সমান! আপত্তি.নিল?
মোহাম্মদ হাফেজ

4
পছন্দ করেছেন !!false
আজেদী 32

আঃ, @ আজেদী 32 ভাল ক্যাচ! যে এক ব্যতিক্রম সমতুল্য।
মোহাম্মদ হাফেজ

52

একটি পার্থক্য হ'ল .nil?এবং সেই .empty?পদ্ধতিগুলি যা প্রোগ্রামিং ল্যাঙ্গুয়েজ রুবি দ্বারা সরবরাহ করা হয়, সেখানে ওয়েব ডেভলপমেন্ট ফ্রেমওয়ার্ক রেলস দ্বারা .blank?কিছু যুক্ত করা হয়।


49

এখানে চিত্র বর্ণনা লিখুন

  • সবকিছু যে nil?হয়blank?
  • সবকিছু যে empty?হয়blank?
  • যে কিছুই empty?হয় নাnil?
  • যে কিছুই nil?হয় নাempty?

tl; dr - কেবলমাত্র ব্যবহার করুন blank?& present?যদি না আপনি ""এবং এর মধ্যে পার্থক্য করতে চান" "


2
ওহো! আপনি আমার +1 পেয়েছেন
Am33d

16

একটি বিশেষ ক্ষেত্রে হ'ল বুলিয়ান মান শূন্য হয় কিনা তা যাচাই করার চেষ্টা করার সময়:

false.present? == false
false.blank? == true
false.nil? == false

এই ক্ষেত্রে সুপারিশটি ব্যবহার করা হবে .nil?


14

any?প্রস্তাবনা সম্পর্কে কেবল একটি ছোট্ট নোট : তিনি ঠিক বলেছেন যে এটি সাধারণত সমতুল্য !empty?। তবে, কেবল শ্বেত স্পেসের একটি স্ট্রিংয়ে any?ফিরে trueআসবে (আলা)" " ) এর ।

এবং অবশ্যই, উপরের 1.9 মন্তব্যটি দেখুন।


রেলগুলিতে, কেবল শ্বেত স্পেস অক্ষরযুক্ত যে কোনও স্ট্রিং "ফাঁকা": "\ n \ r \ t" .ব্ল্যাঙ্ক? # => সত্য
লনি এলোয়াস

13

any?সাধারণত যা ভুলে যাবেন না !empty?। রেলগুলিতে আমি সাধারণত একটি বিবৃতি শেষে কিছু উপস্থিতির জন্য যাচাই করি if somethingবা unless somethingতারপরে blank?যেখানে প্রয়োজন হয় সেখানে ব্যবহার করি কারণ এটি সর্বত্র কাজ করে বলে মনে হয়।


4
.any? রুবি 1.9 তে স্ট্রিং দিয়ে কাজ করে না, কোন হিসাবে? গণনার প্রয়োজন, এবং স্ট্রিং # প্রতিটি নিজেই রুবি 1.9 তে কাজ করে না।
অ্যান্ড্রু গ্রিম

4
any?শূন্যতা যাচাইয়ের জন্য যত্নশীল । আপনার কাছে মিথ্যা মানগুলির একটি অ্যারে থাকলে এটি মিথ্যা ফেরত দেয়। এর কাছাকাছি যাওয়ার উপায় হ'ল সর্বদা-সত্য ব্লকটি অতিক্রম করা: [nil, false].any?{ true }তবে !empty?এটি সংক্ষিপ্ত এবং অদ্ভুত আচরণটি আপনার মনে নেই।
কেলভিন

12

nil?হ'ল একটি মানক রুবি পদ্ধতি যা সমস্ত বস্তুতে কল করা যেতে পারে এবং trueযদি বস্তুটি থাকে তবে ফিরে আসে nil:

b = nil
b.nil? # => true

empty?স্ট্যান্ডার্ড রুবি পদ্ধতি যা স্ট্রিংস, অ্যারে এবং হ্যাশগুলির মতো কিছু বস্তুর উপর কল করা যেতে পারে এবং trueযদি এই বস্তুগুলির কোনও উপাদান না থাকে তবে ফিরে আসতে পারে:

a = []
a.empty? # => true

b = ["2","4"]
b.empty? # => false

empty?nilবস্তুর উপর কল করা যাবে না ।

blank?এটি একটি রেলস পদ্ধতি যা nilঅবজেক্টগুলির পাশাপাশি খালি অবজেক্টগুলিতেও ডাকা যেতে পারে ।


7

পার্থক্য কী তা অন্য সবাই ভাল করে ব্যাখ্যা করেছেন।

আমি পাগল নেভিগেশন রুবি যোগ করতে চাই, এটি ব্যবহার করার জন্য উত্তম obj.blank?বা obj.present?পরিবর্তে obj.nil?বা obj.empty?

obj.blank?পরিচালনা সব ধরনের nil, '', [], {}, এবং আয় trueযদি মান পাওয়া যায় না এবং আয় falseযদি মান উপলব্ধ বস্তুর কোন প্রকার রয়েছে।


5

exists?ডাটাবেসে ডেটা রয়েছে কি না তা পরীক্ষা করতে পদ্ধতিটি ব্যবহার করা যেতে পারে। এটি বুলিয়ান মানগুলি প্রদান করে trueবা হয় false


মডেল ক্লাসে কাজ করে!
রজার

4

রেল 4

@ কর্বন-ব্রুকের বিকল্পের অ্যারে গেটচা: ফাঁকা? একটি অ্যারে কেবল খালি মান রাখে এবং খালি হিসাবে গণ্য করা যায় কিনা তা যাচাইয়ের জন্য? সত্য:

[ nil, '' ].all? &:blank? == true

এক এছাড়াও করতে পারে:

[nil, '', "", " ",' '].reject(&:blank?).blank? == true

3

nil?যে কোনও বস্তুতে ব্যবহার করা যেতে পারে। এটি নির্ধারণ করে যে 'ফাঁকা' মান সহ বস্তুর কোনও মান আছে কি না।

উদাহরণ স্বরূপ:

example = nil
example.nil?  # true

"".nil?  # false

মূলত nil?কেবল তখনই সত্য দেখাবে যদি বস্তুটি আসলে 'শূন্য' এর সমান হয়।

empty?কেবল সেই বস্তুগুলিতে কল করা হয় যা সংগ্রহ হিসাবে বিবেচিত হয়। এর মধ্যে স্ট্রিং (অক্ষরগুলির সংগ্রহ), হ্যাশগুলি (কী / মান জোড়গুলির সংগ্রহ) এবং অ্যারেগুলি (স্বেচ্ছাসেবী সামগ্রীর সংকলন) এর মতো জিনিস অন্তর্ভুক্ত রয়েছে। empty?সত্য সত্য ফিরে সংগ্রহের কোন আইটেম আছে।

উদাহরণ স্বরূপ:

"".empty? # true
"hi".empty?   # false
{}.empty?  # true
{"" => ""}.empty?   # false
[].empty?   # true
[nil].empty?  # false

nil.empty?  # NoMethodError: undefined method `empty?' for nil:NilClass

লক্ষ্য করুন empty? নীল বস্তুগুলিতে কল করা যাবে না কারণ নীল বস্তুগুলি সংগ্রহ নয় এবং এটি একটি ব্যতিক্রম বাড়াবে।

এছাড়াও লক্ষ করুন যে কোনও সংগ্রহের আইটেমগুলি ফাঁকা থাকলেও এর অর্থ এই নয় যে কোনও সংগ্রহ খালি।

blank?মূলত এর সংমিশ্রণ nil?এবং empty?এটি আপনি যে সংগ্রহগুলি সংগ্রহ হিসাবে ধরে নিয়েছেন তা যাচাই করার জন্য এটি দরকারী, তবে এটি শূন্যও হতে পারে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.