আমি switch
রুবিতে কীভাবে একটি বিবৃতি লিখব ?
আমি switch
রুবিতে কীভাবে একটি বিবৃতি লিখব ?
উত্তর:
রুবি এর পরিবর্তে case
অভিব্যক্তিটি ব্যবহার করে।
case x
when 1..5
"It's between 1 and 5"
when 6
"It's 6"
when "foo", "bar"
"It's either foo or bar"
when String
"You passed a string"
else
"You gave me #{x} -- I have no idea what to do with that."
end
অপারেটরটি ব্যবহার করে রুবি when
ক্লজের আইটেমটির সাথে ক্লজটির সাথে তুলনা করে । উদাহরণস্বরূপ, এবং না ।case
===
1..5 === x
x === 1..5
এটি when
উপরোক্ত হিসাবে পরিশীলিত ক্লজগুলির জন্য অনুমতি দেয় । সীমা, শ্রেণি এবং সমস্ত ধরণের জিনিস কেবল সাম্যতার চেয়ে পরীক্ষা করা যায়।
switch
অন্যান্য অনেক ভাষায় বিবৃতিগুলির বিপরীতে , রুবি'র পতনcase
নেই , তাই এটিকে প্রতিটি দিয়ে শেষ করার দরকার নেই । আপনি একক ধারাতেও একাধিক ম্যাচ নির্দিষ্ট করতে পারেন ।when
break
when
when "foo", "bar"
when
return
when "foo" then "bar"
then
। অন্যান্য উত্তরগুলি দেখুন।
case...when
ক্লাস পরিচালনা করার সময় কিছুটা অপ্রত্যাশিতভাবে আচরণ করে। এটি ===
অপারেটরটি ব্যবহার করে এমন কারণে ।
সেই অপারেটর আক্ষরিক সাথে প্রত্যাশার মতো কাজ করে তবে ক্লাসে নয়:
1 === 1 # => true
Fixnum === Fixnum # => false
এর অর্থ হ'ল আপনি যদি case ... when
কোনও সামগ্রীর ক্লাসের ওভার করতে চান তবে এটি কাজ করবে না:
obj = 'hello'
case obj.class
when String
print('It is a string')
when Fixnum
print('It is a number')
else
print('It is not a string or number')
end
"এটি কোনও স্ট্রিং বা সংখ্যা নয়" মুদ্রণ করবে।
ভাগ্যক্রমে, এটি সহজেই সমাধান করা হয়। ===
অপারেটর সংজ্ঞায়িত করা হয়েছে যাতে এটি ফেরৎ true
যদি আপনি কোন ক্লাসে সঙ্গে এটি ব্যবহার এবং দ্বিতীয় প্রতীক হিসাবে ক্লাসের একটা নিদর্শন: সরবরাহ
Fixnum === 1 # => true
সংক্ষেপে, উপরের কোডটি সরিয়ে ফিক্সড করা যাবে .class
:
obj = 'hello'
case obj # was case obj.class
when String
print('It is a string')
when Fixnum
print('It is a number')
else
print('It is not a string or number')
end
আমি উত্তর খুঁজতে গিয়ে এই সমস্যাটি আজ আঘাত করেছি, এবং এটিই প্রথম প্রদর্শিত পৃষ্ঠা ছিল, তাই আমি বুঝতে পেরেছিলাম যে এটি আমার একই পরিস্থিতিতে অন্যদের পক্ষে কার্যকর হবে।
.class
অংশগ্রহণ, ধন্যবাদ নোট আকর্ষণীয়। অবশ্যই, এটি সম্পূর্ণরূপে উপযুক্ত আচরণ (যদিও আমি দেখতে পেলাম যে এটি মুদ্রণ হবে এমন ভাবা সাধারণ ভুল হতে পারে It is a string
) ... আপনি কিছু স্বেচ্ছাচারিত বস্তুর শ্রেণি পরীক্ষা করছেন , অবজেক্টটি নিজেই নয়। সুতরাং, উদাহরণস্বরূপ: case 'hello'.class when String then "String!" when Class then "Class!" else "Something else" end
মধ্যে ফলাফল: "Class!"
এই জন্য একই কাজ করে 1.class
, {}.class
ইত্যাদি বাতিল .class
, আমরা পেতে "String!"
বা "Something else"
এই বিভিন্ন মানের জন্য।
এটি case
রুবি ব্যবহার করে করা হয়। উইকিপিডিয়ায় " স্যুইচ স্টেটমেন্ট " দেখুন।
উদ্ধৃত:
case n
when 0
puts 'You typed zero'
when 1, 9
puts 'n is a perfect square'
when 2
puts 'n is a prime number'
puts 'n is an even number'
when 3, 5, 7
puts 'n is a prime number'
when 4, 6, 8
puts 'n is an even number'
else
puts 'Only single-digit numbers are allowed'
end
আরেকটি উদাহরণ:
score = 70
result = case score
when 0..40 then "Fail"
when 41..60 then "Pass"
when 61..70 then "Pass with Merit"
when 71..100 then "Pass with Distinction"
else "Invalid Score"
end
puts result
আমার কিন্ডলে রুবি প্রোগ্রামিং ল্যাঙ্গুয়েজের (প্রথম সংস্করণ, ওরিলি) পৃষ্ঠার 123 পৃষ্ঠার উপরে, এতে বলা হয়েছে then
যে when
অনুচ্ছেদের পরে থাকা মূল শব্দটিকে একটি নতুন লাইন বা সেমিকোলন ( if then else
সিনট্যাক্সের মতো) দিয়ে প্রতিস্থাপন করা যেতে পারে । (রুবি ১.৮ এছাড়াও এর পরিবর্তে একটি কোলনকে অনুমতি দেয় then
তবে রুবি ১.৯ এ এই সিনট্যাক্সের আর অনুমতি নেই))
when (-1.0/0.0)..-1 then "Epic fail"
type = #{score}
প্রতিটি লাইন বলার চেয়ে , আপনি যা করেছেন তা আমি অনুলিপি করতে পারি। আরও মার্জিত আমি ওয়ান-
চকের উত্তরে আরও উদাহরণ যুক্ত করতে :
পরামিতি সহ:
case a
when 1
puts "Single value"
when 2, 3
puts "One of comma-separated values"
when 4..6
puts "One of 4, 5, 6"
when 7...9
puts "One of 7, 8, but not 9"
else
puts "Any other thing"
end
প্যারামিটার ছাড়াই:
case
when b < 3
puts "Little than 3"
when b == 3
puts "Equal to 3"
when (1..10) === b
puts "Something in closed range of [1..10]"
end
দয়া করে, " রুবিতে একটি স্যুইচ স্টেটমেন্ট কীভাবে লিখবেন " সম্পর্কে সচেতন হন যা কিকিতো সতর্ক করে দিয়েছে।
or
অনেক প্রোগ্রামিং ভাষার, বিশেষ করে C থেকে উদ্ভূত, তথাকথিত জন্য সমর্থন আছে সুইচ Fallthrough । আমি রুবিতে এটি করার সবচেয়ে ভাল উপায়টি অনুসন্ধান করেছিলাম এবং ভেবেছিলাম এটি অন্যের পক্ষে উপযোগী হতে পারে:
সি-এর মতো ভাষায় পতনের কাজটি সাধারণত:
switch (expression) {
case 'a':
case 'b':
case 'c':
// Do something for a, b or c
break;
case 'd':
case 'e':
// Do something else for d or e
break;
}
রুবিতে, নিম্নলিখিত পদ্ধতিতে এটি অর্জন করা যেতে পারে:
case expression
when 'a', 'b', 'c'
# Do something for a, b or c
when 'd', 'e'
# Do something else for d or e
end
এটি কঠোরভাবে সমতুল্য নয়, কেননা এটির 'a'
মাধ্যমে 'b'
বা পড়ে যাওয়ার আগে কোডের একটি ব্লক কার্যকর করতে দেওয়া সম্ভব নয় 'c'
তবে বেশিরভাগ অংশে আমি এটি একইভাবে দরকারী হিসাবে যথেষ্ট বলে মনে করি।
রুবি ২.০-তে আপনি নীচে case
বিবৃতিতে ল্যাম্বডাস ব্যবহার করতে পারেন :
is_even = ->(x) { x % 2 == 0 }
case number
when 0 then puts 'zero'
when is_even then puts 'even'
else puts 'odd'
end
আপনি কাস্টম সহ স্ট্রাক্ট ব্যবহার করে সহজেই নিজের তুলনাকারী তৈরি করতে পারেন ===
Moddable = Struct.new(:n) do
def ===(numeric)
numeric % n == 0
end
end
mod4 = Moddable.new(4)
mod3 = Moddable.new(3)
case number
when mod4 then puts 'multiple of 4'
when mod3 then puts 'multiple of 3'
end
(" রুবি ২.০-তে কেস স্টেটমেন্টের সাথে ব্যবহার করা যেতে পারে? " থেকে নেওয়া উদাহরণ )
বা, একটি সম্পূর্ণ ক্লাস সহ:
class Vehicle
def ===(another_vehicle)
self.number_of_wheels == another_vehicle.number_of_wheels
end
end
four_wheeler = Vehicle.new 4
two_wheeler = Vehicle.new 2
case vehicle
when two_wheeler
puts 'two wheeler'
when four_wheeler
puts 'four wheeler'
end
(" কীভাবে রুবি কেস স্টেটমেন্ট কাজ করে এবং আপনি এটি দিয়ে কী করতে পারেন " থেকে নেওয়া উদাহরণ ।)
আপনি নিয়মিত এক্সপ্রেশন ব্যবহার করতে পারেন, যেমন স্ট্রিংয়ের একটি প্রকারের সন্ধান:
case foo
when /^(true|false)$/
puts "Given string is boolean"
when /^[0-9]+$/
puts "Given string is integer"
when /^[0-9\.]+$/
puts "Given string is float"
else
puts "Given string is probably string"
end
রুবি এর জন্য case
সাম্য অপারেন্ড ব্যবহার করবে ===
(ধন্যবাদ @ জিমডিভিলি) অতিরিক্ত তথ্য " রুবি অপারেটর " এ উপলব্ধ । এটি @ মমিডেমিরবাস উদাহরণ হিসাবে (পরামিতি ছাড়াই) ব্যবহার করেও করা যেতে পারে, কেবল এই পদ্ধতির ক্ষেত্রেই এই ধরণের ক্ষেত্রে পরিষ্কার হয়।
আপনি যদি রুবি সুইচ মামলায় কীভাবে একটি ওআর শর্ত ব্যবহার করবেন তা জানতে আগ্রহী:
সুতরাং, একটি case
বিবৃতি, একটি ,
সমতুল্য ||
একটি ইন if
বিবৃতি।
case car
when 'Maruti', 'Hyundai'
# Code here
end
" একটি রুবি কেস স্টেটমেন্ট কীভাবে কাজ করে এবং আপনি এটি দিয়ে কী করতে পারেন " দেখুন।
এটি বলা হয় case
এবং এটি আপনার প্রত্যাশা মতো কাজ করে, সাথে সাথে আরও অনেক মজাদার স্টাফ সৌজন্যে ===
যা পরীক্ষাগুলি প্রয়োগ করে।
case 5
when 5
puts 'yes'
else
puts 'else'
end
এখন কিছু মজার জন্য:
case 5 # every selector below would fire (if first)
when 3..7 # OK, this is nice
when 3,4,5,6 # also nice
when Fixnum # or
when Integer # or
when Numeric # or
when Comparable # (?!) or
when Object # (duhh) or
when Kernel # (?!) or
when BasicObject # (enough already)
...
end
এবং এটি দেখা যাচ্ছে আপনি / অন্য শৃঙ্খলাটি (যেমন, পরীক্ষাগুলি একটি সাধারণ পরিবর্তনশীল জড়িত না হলেও) case
এছাড়াও প্রাথমিক case
পরামিতিটি ছেড়ে দিয়ে এবং প্রথম মিলটি যেখানে আপনি চান তা কেবল বাক্যগুলি লেখার মাধ্যমে প্রতিস্থাপন করতে পারেন।
case
when x.nil?
...
when (x.match /'^fn'/)
...
when (x.include? 'substring')
...
when x.gsub('o', 'z') == 'fnzrq'
...
when Time.now.tuesday?
...
end
রুবি case
সুইচ স্টেটমেন্ট লেখার জন্য ব্যবহার করে ।
অনুযায়ী case
ডকুমেন্টেশন:
কেস স্টেটমেন্টগুলিতে একটি alচ্ছিক শর্ত থাকে যা
case
শূন্য বা আরও বেশিwhen
ধারাতে যুক্তির অবস্থানে থাকে ।when
শর্তটির সাথে মেলে (বা বুলিয়ান সত্যের মূল্যায়ন করার জন্য, শর্তটি শূন্য হলে) "জিতেছে" এবং এর কোড স্তবনাটি কার্যকর করা হয়েছে The কেস স্টেটমেন্টের মান হ'ল সফলwhen
ধারাটির মান , বাnil
যদি এরকম কোনও ধারা নেই।একটি মামলা বিবৃতি একটি
else
ধারা দিয়ে শেষ হতে পারে । প্রতিটিwhen
বিবৃতি কমা দ্বারা পৃথক, একাধিক প্রার্থী মান থাকতে পারে।
উদাহরণ:
case x
when 1,2,3
puts "1, 2, or 3"
when 10
puts "10"
else
puts "Some other number"
end
সংক্ষিপ্ত সংস্করণ:
case x
when 1,2,3 then puts "1, 2, or 3"
when 10 then puts "10"
else puts "Some other number"
end
এবং যেমন " রুবির কেস স্টেটমেন্ট - অ্যাডভান্সড টেকনিকস " রুবিকে বর্ণনা করে case
;
ব্যাপ্তিগুলির সাথে ব্যবহার করা যেতে পারে :
case 5
when (1..10)
puts "case statements match inclusion in a range"
end
## => "case statements match inclusion in a range"
রেজেক্সের সাথে ব্যবহার করা যেতে পারে :
case "FOOBAR"
when /BAR$/
puts "they can match regular expressions!"
end
## => "they can match regular expressions!"
প্রকস এবং ল্যাম্বডাসের সাথে ব্যবহার করা যেতে পারে :
case 40
when -> (n) { n.to_s == "40" }
puts "lambdas!"
end
## => "lambdas"
এছাড়াও, আপনার নিজের ম্যাচের ক্লাসগুলির সাথে ব্যবহার করা যেতে পারে:
class Success
def self.===(item)
item.status >= 200 && item.status < 300
end
end
class Empty
def self.===(item)
item.response_size == 0
end
end
case http_response
when Empty
puts "response was empty"
when Success
puts "response was a success"
end
আপনার ক্ষেত্রে উপর নির্ভর করে, আপনি পদ্ধতিগুলির একটি হ্যাশ ব্যবহার করতে পছন্দ করতে পারেন।
যদি এর একটি দীর্ঘ তালিকা when
থাকে এবং তাদের প্রত্যেকের একটি (অন্তর অন্তর নয়) এর সাথে তুলনা করার একটি দৃ concrete় মান থাকে তবে পদ্ধতির একটি হ্যাশ ঘোষণা করা এবং তারপরে হ্যাশ থেকে প্রাসঙ্গিক পদ্ধতিটি কল করা আরও কার্যকর হবে।
# Define the hash
menu = {a: :menu1, b: :menu2, c: :menu2, d: :menu3}
# Define the methods
def menu1
puts 'menu 1'
end
def menu2
puts 'menu 2'
end
def menu3
puts 'menu3'
end
# Let's say we case by selected_menu = :a
selected_menu = :a
# Then just call the relevant method from the hash
send(menu[selected_menu])
মাল্টি-ভ্যালু যখন এবং নো-ভ্যালু কেস:
print "Enter your grade: "
grade = gets.chomp
case grade
when "A", "B"
puts 'You pretty smart!'
when "C", "D"
puts 'You pretty dumb!!'
else
puts "You can't even use a computer!"
end
এবং এখানে একটি নিয়মিত অভিব্যক্তি সমাধান:
print "Enter a string: "
some_string = gets.chomp
case
when some_string.match(/\d/)
puts 'String has numbers'
when some_string.match(/[a-zA-Z]/)
puts 'String has letters'
else
puts 'String has no numbers or letters'
end
case some_string, when /\d/, (stuff), when /[a-zA-Z]/, (stuff), end
(যেখানে ,
নিউলাইন মানে)
আপনি case
রুবিতে দুটি ভিন্ন উপায়ে এক্সপ্রেশন লিখতে পারেন :
if
বিবৃতি ধারাবাহিক অনুরূপcase
এবং প্রতিটি when
অনুচ্ছেদে লক্ষ্যটির সাথে তুলনা করা হবে।age = 20
case
when age >= 21
puts "display something"
when 1 == 0
puts "omg"
else
puts "default condition"
end
বা:
case params[:unknown]
when /Something/ then 'Nothing'
when /Something else/ then 'I dont know'
end
প্রচুর দুর্দান্ত উত্তর কিন্তু আমি ভেবেছিলাম আমি একটি ফ্যাক্টয়েড যুক্ত করব .. আপনি যদি বস্তুগুলির (ক্লাস) তুলনা করার চেষ্টা করছেন তবে নিশ্চিত করুন যে আপনার কাছে কোনও স্পেস শিপ পদ্ধতি রয়েছে (কোনও রসিকতা নয়) বা কীভাবে তাদের তুলনা করা হচ্ছে তা বুঝতে পারেন
" রুবি ইক্যুয়ালিটি এবং অবজেক্টের তুলনা " বিষয়টিতে একটি ভাল আলোচনা is
<=>
, যা -1, 0, 1, বা শূন্যের তুলনায় যথাক্রমে কম, সমান, বৃহত্তর, বা তুলনীয় নয় কিনা তার উপর নির্ভর করে ফিরে আসে to রুবির তুলনাযোগ্য মডিউল ডকুমেন্টেশন এটি ব্যাখ্যা করে।
উপরের অনেক উত্তরে যেমন বলা হয়েছে, ===
অপারেটরটি case
/ when
বিবৃতিগুলির ফণার নীচে ব্যবহৃত হয় ।
এখানে অপারেটর সম্পর্কে অতিরিক্ত তথ্য:
===
স্ট্রিং, রেঞ্জ এবং রেজিএক্স্পের মতো রুবির অনেকগুলি বিল্ট-ইন ক্লাস ===
অপারেটরের নিজস্ব বাস্তবায়ন সরবরাহ করে , "কেস- ইক্যুয়ালিটি ", "ট্রিপল ইকুয়াল" বা "থ্রিকুইয়াল" নামেও পরিচিত। যেহেতু এটি প্রতিটি শ্রেণিতে আলাদাভাবে প্রয়োগ করা হয়েছে, এটি যে ধরণের অবজেক্টের উপর ডাকা হয়েছিল তার উপর নির্ভর করে এটি আলাদা আচরণ করবে। সাধারণত, ডানদিকে থাকা অবজেক্টটি বাম দিকের অবজেক্টটির "অন্তর্গত" বা "সদস্য" হলে এটি সত্য হয়। উদাহরণস্বরূপ, এটি কোনও বস্তু শ্রেণীর উদাহরণ (বা এর উপ-শ্রেণীর একটি) কিনা তা পরীক্ষা করতে ব্যবহার করা যেতে পারে।
String === "zen" # Output: => true
Range === (1..2) # Output: => true
Array === [1,2,3] # Output: => true
Integer === 2 # Output: => true
একই পদ্ধতিটি অন্যান্য পদ্ধতির সাথে অর্জন করা যেতে পারে যা সম্ভবত কাজের জন্য সবচেয়ে উপযুক্ত, যেমন is_a?
এবংinstance_of?
।
===
যখন ===
অপারেটরটিকে একটি ব্যাপ্তি অবজেক্টে ডাকা হয়, ডানদিকে মান বামদিকে পরিসরের মধ্যে পড়ে তবে এটি সত্য হয়।
(1..4) === 3 # Output: => true
(1..4) === 2.345 # Output: => true
(1..4) === 6 # Output: => false
("a".."d") === "c" # Output: => true
("a".."d") === "e" # Output: => false
মনে রাখবেন যে ===
অপারেটর ===
বাম-হাতের বস্তুর পদ্ধতিটি আহ্বান করে । সুতরাং (1..4) === 3
সমতূল্য (1..4).=== 3
। অন্য কথায়, বাম-হাতের অপারেন্ডের শ্রেণি নির্ধারণ করবে যে ===
পদ্ধতিটির কোন বাস্তবায়ন বলা হবে, সুতরাং অপারেন্ড অবস্থানগুলি বিনিময়যোগ্য নয়।
===
ডান দিকের স্ট্রিংটি বামে নিয়মিত প্রকাশের সাথে মিলে গেলে সত্যটি প্রত্যাবর্তন করে।
/zen/ === "practice zazen today" # Output: => true
# is similar to
"practice zazen today"=~ /zen/
উপরোক্ত দুটি উদাহরণের মধ্যে কেবলমাত্র প্রাসঙ্গিক পার্থক্যটি হ'ল, যখন কোনও মিল হয়, ===
সত্যটি =~
প্রত্যাবর্তন করে এবং পূর্ণসংখ্যা ফেরত দেয় যা রুবিতে সত্যবাদী মান। আমরা শীঘ্রই এটিতে ফিরে পাবেন।
puts "Recommend me a language to learn?"
input = gets.chomp.downcase.to_s
case input
when 'ruby'
puts "Learn Ruby"
when 'python'
puts "Learn Python"
when 'java'
puts "Learn Java"
when 'php'
puts "Learn PHP"
else
"Go to Sleep!"
end
$age = 5
case $age
when 0 .. 2
puts "baby"
when 3 .. 6
puts "little child"
when 7 .. 12
puts "child"
when 13 .. 18
puts "youth"
else
puts "adult"
end
আরও তথ্যের জন্য " রুবি - যদি ... অন্যথায় কেস না হয় " দেখুন।
আমি ব্যবহার শুরু করেছি:
a = "secondcase"
var_name = case a
when "firstcase" then "foo"
when "secondcase" then "bar"
end
puts var_name
>> "bar"
এটি কিছু ক্ষেত্রে কমপ্যাক্ট কোডকে সহায়তা করে।
Hash
একটি case
বিবৃতি না দিয়ে একটি ব্যবহার করে করা উচিত ।
আপনার পরিবেশে নিয়মিত প্রকাশের জন্য কোনও সমর্থন নেই? যেমন শপাইফ স্ক্রিপ্ট সম্পাদক (এপ্রিল, 2018):
[ত্রুটি]: অবিচ্ছিন্ন ধ্রুবক RegExp
ইতিমধ্যে এখানে এবং এখানে ইতিমধ্যে আচ্ছাদিত পদ্ধতির সংমিশ্রনের পরে একটি কার্যবিধি :
code = '!ADD-SUPER-BONUS!'
class StrContains
def self.===(item)
item.include? 'SUPER' or item.include? 'MEGA' or\
item.include? 'MINI' or item.include? 'UBER'
end
end
case code.upcase
when '12345PROMO', 'CODE-007', StrContains
puts "Code #{code} is a discount code!"
when '!ADD-BONUS!'
puts 'This is a bonus code!'
else
puts 'Sorry, we can\'t do anything with the code you added...'
end
আমি or
ক্লাস মেথড স্টেটমেন্টে এস ব্যবহার করেছি যেহেতু ||
এর চেয়ে বেশি অগ্রাধিকার রয়েছে
.include?
। আপনি যদি রুবি-নাজি হন তবে অনুগ্রহ করে এর (item.include? 'A') || ...
পরিবর্তে আমি এটি ব্যবহার করেছি । repl.it পরীক্ষা।
এটি ,
একটি when
ধারাতে কমা ( ) জোর দেওয়া সমালোচনা । এটি ||
একটি if
বিবৃতি হিসাবে কাজ করে , অর্থাৎ এটি একটি ওআর তুলনা করে এবং ধারাটির সীমানা প্রকাশের মধ্যে একটি এবং তুলনা করে না when
। নিম্নলিখিত কেস স্টেটমেন্ট দেখুন:
x = 3
case x
when 3, x < 2 then 'apple'
when 3, x > 2 then 'orange'
end
=> "apple"
x
2 এর চেয়ে কম নয়, তবুও ফেরতের মান "apple"
। কেন? কারণ x
ছিল 3 এবং যখন থেকে ',`` acts as an
|| , it did not bother to evaluate the expression
x <2 '
আপনি মনে করতে পারেন যে কোনও AND সম্পাদন করতে আপনি নীচের মতো কিছু করতে পারেন, তবে এটি কার্যকর হয় না:
case x
when (3 && x < 2) then 'apple'
when (3 && x > 2) then 'orange'
end
=> nil
কারণ কাজ করে না (3 && x > 2)
সত্য মূল্যায়ণ এবং রুবি সত্য মান নেয় এবং তা তুলনা করে x
দিয়ে ===
, যা সত্য নয়, যেহেতু x
3।
একটি &&
তুলনা করতে, আপনাকে case
একটি if
/ else
ব্লকের মতো আচরণ করতে হবে :
case
when x == 3 && x < 2 then 'apple'
when x == 3 && x > 2 then 'orange'
end
রুবি প্রোগ্রামিং ল্যাঙ্গুয়েজ বইয়ে, ম্যাটজ বলেছেন যে এই আধুনিক রূপটি সহজ (এবং প্রায়শই ব্যবহৃত হয়) ফর্ম, যা if
/ elsif
/ এর বিকল্প বিন্যাসের চেয়ে বেশি কিছু নয় else
। তবে এটি প্রায়শই ব্যবহৃত হয় বা না হয়, &&
প্রদত্ত when
ধারাটির জন্য একাধিক অভিব্যক্তি সংযুক্ত করার আমি অন্য কোনও উপায় দেখতে পাচ্ছি না ।
if...elsif
? দেখে মনে হচ্ছে আপনি কেস স্টেটমেন্ট এবং শর্ত মেশানোর চেষ্টা করছেন। কেন? কেবল শর্তসাপেক্ষে যখন ব্লকের ভিতরে রাখুন , যেমন। when 3; ( x < 2 ) ? 'apple' : 'orange'
আমরা একাধিক শর্তের জন্য সুইচ স্টেটমেন্ট লিখতে পারি।
উদাহরণ স্বরূপ,
x = 22
CASE x
WHEN 0..14 THEN puts "#{x} is less than 15"
WHEN 15 THEN puts "#{x} equals 15"
WHEN 15 THEN puts "#{x} equals 15"
WHEN 15..20 THEN puts "#{x} is greater than 15"
ELSE puts "Not in the range, value #{x} "
END
case
, when
, end
) কেস সংবেদনশীল হয় এবং এই মত বড় হাতের হতে পারে না।
NoMethodError (undefined method
CASE 'প্রধানের জন্য: অবজেক্ট) `। @ Sondra.kinsey যেমনটি বলেছে, আপনি বড় হাতের অক্ষর ব্যবহার করতে পারবেন না। রুবি ভাবেন এটি একটি কনস্ট্যান্ট।
case
বিবৃতি অপারেটর মত হল switch
অন্য ভাষায়।
এটি switch...case
সি এর বাক্য গঠন :
switch (expression)
{
case constant1:
// statements
break;
case constant2:
// statements
break;
.
.
.
default:
// default statements
}
এটি case...when
রুবির সিনট্যাক্স :
case expression
when constant1, constant2 #Each when statement can have multiple candidate values, separated by commas.
# statements
next # is like continue in other languages
when constant3
# statements
exit # exit is like break in other languages
.
.
.
else
# statements
end
উদাহরণ স্বরূপ:
x = 10
case x
when 1,2,3
puts "1, 2, or 3"
exit
when 10
puts "10" # it will stop here and execute that line
exit # then it'll exit
else
puts "Some other number"
end
আরও তথ্যের জন্য case
ডকুমেন্টেশন দেখুন।