রুবিতে কোনও নীল বা দৈর্ঘ্য == 0 যাচাই করার আরও ভাল উপায় আছে?


169

স্ট্রিংটি শূন্য নয় বা রুবিতে 0 দৈর্ঘ্য রয়েছে কিনা তা পরীক্ষা করে দেখার জন্য নীচের চেয়ে আরও ভাল উপায় আছে কি?

if !my_string || my_string.length == 0
  return true
else
  return false
end

সি # তে সুবিধাজনক

string.IsNullOrEmpty(myString)

রুবির মতো কিছু?


16
এটির মতো ইফ-স্টেটমেন্ট থাকা বাড়াবাড়ি: "যদি (শর্ত) হয় তবে অন্যথায় মিথ্যা"। শর্তটি নিজেই if-বিবৃতি হিসাবে একই সত্যতা আছে।
কাপ্তজনকোল্ড

my_string || my_string.length == 0শূন্য NoMethodErrorহলে একটি উত্থাপন করা হবে my_string। আমি মনে করি আপনি বোঝাতে চেয়েছিলেন:my_string.nil? || my_string.length == 0
নাভিদ

1
এটি হওয়া উচিত!my_string || my_string.length == 0
লেভসা

উত্তর:


224

যখন আমি অভিনয় সম্পর্কে চিন্তিত নই, আমি প্রায়শই এটি ব্যবহার করি:

if my_string.to_s == ''
  # It's nil or empty
end

অবশ্যই বিভিন্ন প্রকরণ রয়েছে ...

if my_string.to_s.strip.length == 0
  # It's nil, empty, or just whitespace
end

2
ব্যবহারের প্রকরণটি stripযথেষ্ট অদক্ষ হতে পারে।
মার্ক-আন্দ্রে লাফোর্টুন

10
আর একটি আকর্ষণীয় উপায় হ'ল my_string.to_s.empty?
রিকার্ডো পেসোসা

বেশিরভাগ লোকের জন্য প্রথম বিকল্পটি সম্পূর্ণ গ্রহণযোগ্য হবে এবং ভাল পড়বে।
amrcus

68

যদি আপনি অ্যাক্টিভসপোর্টের প্রয়োজন হয় তবে আপনি কেবল #blank?পদ্ধতিটি ব্যবহার করতে পারেন যা নীলক্লাস এবং স্ট্রিং উভয়ের জন্য সংজ্ঞায়িত।


15
মনে রাখবেন যে কেবল একটি সাদা অংশযুক্ত স্ট্রিংটিকে এখনও ফাঁকা হিসাবে বিবেচনা করা হয়। তাই "" .ব্ল্যাঙ্ক? সত্য.
গ্র্যান্ট হাচিনস

2
এছাড়াও, বুলিয়ান মিথ্যা, {} এবং [] খালি মনে করা হয়। {} B। সমস্ত সত্য থেকে মূল্যায়ন।
শাহহারজ

64

আমি নিম্নলিখিত হিসাবে এটি করতে পছন্দ করি (একটি রেল / অ্যাক্টিভসপোর্ট পরিবেশে):

variable.to_s.empty?

এটি কাজ করে কারণ:

nil.to_s == ""
"".to_s == ""

3
একটি ভাল ব্যাখ্যা কেন string.to_s.empty?উভয়ের জন্য কাজ করে nilএবং ""
জর্জিয়ার

31

জ্যাকবির প্রস্তাবের বিকল্প হ'ল:

class NilClass
  def nil_or_empty?
    true
  end
end

class String
  def nil_or_empty?
    empty?
  end
end

10
তবে .. তবে .. রুবি কোর লাইব্রেরি ইতিমধ্যে এটি প্রয়োগ করে। nil.to_s => "", তাই আপনি thing.to_s == বলতে পারেন ""
DigitalRoss

1
@ ডিজিটালরোস এটি স্ট্রিং রূপান্তর এড়িয়ে চলে যা সামান্য পারফরম্যান্সের সমস্যা হতে পারে বা নাও হতে পারে।
ভোর্টিকো

30

যেমন এখানে বলা হয়েছিল রেলের আগে (অ্যাক্টিভসপোর্ট) কোনও ফাঁকা ফাঁকা আছে? পদ্ধতি এবং এটি এভাবে প্রয়োগ করা হয়:

class Object
  def blank?
    respond_to?(:empty?) ? empty? : !self
  end
end

যে কোনও রুবি ভিত্তিক প্রকল্পে যুক্ত করা সহজ।

এই সমাধানটির সৌন্দর্য হ'ল এটি কেবল স্ট্রিংয়ের জন্যই নয় অ্যারে এবং অন্যান্য ধরণের ক্ষেত্রেও অটো-ম্যাজিক্যালির কাজ করে।


15

variable.blank? এটা করবো. স্ট্রিংটি খালি থাকলে বা স্ট্রিং শূন্য থাকলে এটি সত্য হয়।


12
প্রকৃতপক্ষে, এটি কেবল রেলগুলিই এক্সটেনশান, খাঁটি রুবি নয়। তবে আপনি যদি রেল ব্যবহার করেন তবে এটি খুব সহজ!
জেমস পি ম্যাকগ্রা

13

nil?বুলিয়ান প্রসঙ্গে বাদ দেওয়া যেতে পারে। সাধারণত, আপনি এটি # সি কোডটির প্রতিরূপ করতে ব্যবহার করতে পারেন:

return my_string.nil? || my_string.empty?

7

প্রথমত, সেই পদ্ধতি থেকে সাবধান থাকুন:

জেসি ইজেল যেমন বলেছেন:

ব্র্যাড আব্রামস

"পদ্ধতিটি সুবিধাজনক বলে মনে হতে পারে তবে বেশিরভাগ সময় আমি খুঁজে পেয়েছি যে গভীর ব্যাগগুলি coverাকতে চেষ্টা করার ফলে এই পরিস্থিতি দেখা দিয়েছে।

আপনার কোডটি স্ট্রিংগুলির ব্যবহারের ক্ষেত্রে কোনও নির্দিষ্ট প্রোটোকলের সাথে লেগে থাকবে এবং আপনার গ্রন্থাগার কোড এবং আপনি যে কোডটির সাথে কাজ করছেন তাতে প্রোটোকলের ব্যবহার বুঝতে হবে।

নুলআরএম্পটি প্রোটোকলটি সাধারণত একটি দ্রুত সমাধান (তাই আসল সমস্যাটি এখনও অন্য কোথাও রয়েছে এবং আপনি দুটি প্রোটোকল ব্যবহারে পেয়েছেন) বা নতুন কোড প্রয়োগ করার সময় এটি কোনও নির্দিষ্ট প্রোটোকলে দক্ষতার অভাব (এবং আবারও আপনার সত্যিকারের কী জানা উচিত? আপনার ফেরতের মানগুলি))

এবং যদি আপনি স্ট্রিং ক্লাস প্যাচ করেন ... নিশ্চিত হন নীলক্লাস প্যাচও হয় নি !

class NilClass
    def empty?; true; end
end

5

প্রত্যেক শ্রেণীর একটি nil?পদ্ধতি রয়েছে:

if a_variable.nil?
    # the variable has a nil value
end

এবং স্ট্রিংগুলির empty?পদ্ধতি রয়েছে:

if a_string.empty?
    # the string is empty
}

মনে রাখবেন যে কোনও স্ট্রিং খালি থাকলে সমান হয় নাnil , সুতরাং empty?স্ট্রিংটি খালি কিনা তা পরীক্ষা করতে পদ্ধতিটি ব্যবহার করুন ।


4

অন্য বিকল্পটি হ'ল উড়ানের ফাঁকা ফলটিতে শূন্য রূপান্তর করা:

(my_string||'').empty?


2

কনরাদ রুডল্ফের সঠিক উত্তর রয়েছে।

যদি এটি আপনাকে সত্যিই বাগ দেয় তবে বানর স্ট্রিং ক্লাসটি প্যাচ করে বা আপনার পছন্দের শ্রেণি / মডিউলে যুক্ত করে। যদিও আপনার কাছে যদি সত্যিই বাধ্যতামূলক কারণ না থাকে তবে বাঁদর প্যাচ কোর অবজেক্টগুলি দেওয়া সত্যিই ভাল অভ্যাস নয়।

class String
  def self.nilorempty?(string)
    string.nil? || string.empty?
  end
end

তাহলে আপনি করতে পারেন String.nilorempty? mystring


2

নাম-এরর ব্যতিক্রমগুলি এড়িয়ে গিয়ে সরল রুবিতে খালি স্ট্রিংগুলি পরীক্ষা করুন

এখানে বেশ কয়েকটি ভাল উত্তর রয়েছে তবে সাধারণ ব্যবহারের ক্ষেত্রে এখানে অ্যাক্টিভসপোর্ট বা বানর-প্যাচিংয়ের প্রয়োজন নেই। উদাহরণ স্বরূপ:

my_string.to_s.empty? if defined? my_string

এটি "সঠিক জিনিসটি করবে" যদি মাই_স্ট্রিং শূন্য হয় বা খালি স্ট্রিং হয় তবে মাই_স্ট্রিং সংজ্ঞায়িত না হলে নেমরর ব্যতিক্রম উত্থাপন করবে না । এটি সাধারণত আরও সংকোচনের চেয়ে পছন্দনীয়:

my_string.to_s.empty? rescue NameError

বা এর আরও ভার্জোজ ইল্ক, কারণ যে ঘটনাগুলি আপনি প্রত্যাশা করেন না তার জন্য ব্যতিক্রমগুলি সত্যই সংরক্ষণ করা উচিত । এক্ষেত্রে এটি সাধারণ ত্রুটি হতে পারে, একটি অপরিজ্ঞাত পরিবর্তনশীল আসলেই ব্যতিক্রমী পরিস্থিতি নয়, সুতরাং এটি সেই অনুযায়ী পরিচালনা করা উচিত।

আপনার মাইলেজ পরিবর্তিত হতে পারে.


1

আপনি কি পরিমার্জন চেষ্টা করেছেন?

module Nothingness
  refine String do
    alias_method :nothing?, :empty?
  end

  refine NilClass do
    alias_method :nothing?, :nil?
  end
end

using Nothingness

return my_string.nothing?

1

আপনি যদি রেল ব্যবহার করছেন, আপনি ব্যবহার করতে পারেন #present?

require 'rails'

nil.present?  # ==> false (Works on nil)
''.present?    # ==> false (Works on strings)
'  '.present?  # ==> false (Works on blank strings)
[].present?    # ==> false(Works on arrays)
false.present? # ==> false (Works on boolean)

সুতরাং, বিপরীতভাবে শূন্য বা শূন্য দৈর্ঘ্যের ব্যবহার পরীক্ষা করতে !present?

!(nil.present?)  # ==> true
!(''.present?)    # ==> true
!('  '.present?)  # ==> true
!([].present?)    # ==> true
!(false.present?) # ==> true

0

রেলগুলিতে আপনি চেষ্টা করতে পারেন #blank?

সতর্কতা: স্ট্রিং শূন্যস্থান নিয়ে থাকলে এটি আপনাকে ইতিবাচক দেয়:

nil.blank? # ==> true
''.blank? # ==> true
'  '.blank? # ==> true
'false'.blank? # ==> false

শুধু এটি নির্দেশ করতে চেয়েছিলেন। হয়তো এটি আপনার প্রয়োজন অনুসারে

UPD। আমি কেন আমার ফিডে পুরানো প্রশ্ন পাচ্ছি? নেক্রোপোস্টিংয়ের জন্য দুঃখিত


0

কোড গল্ফারদের জন্য:

if my_string=~/./
  p 'non-empty string'
else
  p 'nil or empty string'
end

বা আপনি যদি গল্ফার না হন (রুবির ২.৩ বা তার পরে প্রয়োজন):

if my_string&.size&.positive?
  # nonzero? also works
  p 'non-empty string'
else
  p 'nil or empty string'
end
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.