রুবিতে প্রশ্ন চিহ্ন অপারেটরের অর্থ কী?


211

রুবিতে প্রশ্ন চিহ্ন অপারেটরের উদ্দেশ্য কী?

কখনও কখনও এটি প্রদর্শিত হয়:

assert !product.valid?

কখনও কখনও এটি একটি ifনির্মাণে হয়।


2
কোনও ফাংশন শেষে প্রশ্ন চিহ্ন কোনও অপারেটর নয়, এটি একটি সাধারণ চরিত্র। কোলন সহ প্রশ্ন চিহ্ন হ'ল একটি ত্রিশূলীয় শর্তসাপেক্ষ অপারেটর। নিজেই প্রশ্ন চিহ্ন একটি অযৌক্তিক উদ্ধৃতি অপারেটর। Stackoverflow.com/questions/16641205/…
ওল্ড প্রো

উত্তর:


296

এটি একটি কোড শৈলী কনভেনশন; এটি নির্দেশ করে যে কোনও পদ্ধতি একটি বুলিয়ান মান দেয়।

প্রশ্ন চিহ্নটি কোনও পদ্ধতির নামের শেষে একটি বৈধ অক্ষর।


9
ধন্যবাদ, তবে এই কনভেনশনটির অর্থ কি এটি কেবল যুক্তিযুক্ত নয় বা পার্শ্ব প্রতিক্রিয়া হতে পারে? মজার বিষয় কীভাবে কোডটিতে রিটার্ন টাইপ সহ টাইপ করা ভাষার চারপাশে এটি হ্যাক হয়।
জেসন

5
এই ক্ষেত্রে এটি কঠোরভাবে একটি পদ্ধতি নামকরণ কনভেনশন। কোনও বুলিয়ান রিটার্ন মান প্রয়োগ করে না। শুধু কারণ একটি প্রশ্ন চিহ্ন পদ্ধতি নাম প্রান্ত অর্থ এ নয় যে পদ্ধতি আবশ্যক একটি বুলিয়ান আসতে ... কিন্তু এটা সবচেয়ে স্পষ্টভাবে উচিত একটি বুলিয়ান ফিরে যান। তবে ?রুবিতে আরও কয়েকটি ব্যবহার রয়েছে (একটি চৌম্বক অপারেটর, একটি চরিত্রকে তার ASCII পূর্ণসংখ্যায় রূপান্তর করে, testRegEx'es ইত্যাদিতে ব্যবহার করে ) যার অনেকগুলি এখানে অন্যান্য উত্তরে অন্তর্ভুক্ত রয়েছে।
কার্ল উইলবার

4
@ জেসন এফওয়াইআই, এমনকি প্রবলভাবে টাইপ করা ভাষাগুলিরও এই জাতীয় সম্মেলন রয়েছে। উদাহরণ হিসেবে বলা যায়, জাভা পদ্ধতি একটি বুলিয়ান মান প্রায়ই প্রিফিক্স করা মধ্যে হিসাবে "হয়", isEmpty(), isDigit()ইত্যাদি রুবি, একই পদ্ধতি লিখিত হবে empty?, এবং digit?যা বেশ একটু সুন্দর আইএমও হয়।
Ajedi32

3
Ajedi32 - হ্যাঁ আমি সম্মত যে এটি মত ফাংশন নাম রাখা ভাল, আমি isসব সময় ব্যবহার । এটি সুইফট থেকে আসা কারও পক্ষে খুব বিভ্রান্তিকর হতে পারে যেহেতু সেখানে প্রশ্ন চিহ্নটি ব্যবহার করা হয় nullable:)
জেসন

83

?একটি অক্ষরের পাশাপাশি নোট করুন , এর জন্য ASCII অক্ষর কোডটি ফিরিয়ে দেবেA

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

?F # => will return 70

পর্যায়ক্রমে রুবি ১.৮ এ আপনি করতে পারেন:

"F"[0]

বা রুবি ১.৯ এ:

"F".ord

এছাড়াও লক্ষ্য করুন যে ?Fস্ট্রিংটি ফিরে আসবে "F", সুতরাং কোডটি আরও ছোট করার জন্য আপনি ?F.ordরুবি ১.৯ এও একই ফলাফল পেতে পারেন "F".ord


29
রুবি ১.৯ এ এটি ফিরে আসবে'F'
12:25

39

এটি রুবিতে একটি কনভেনশন যা পদ্ধতিগুলি যেগুলি বুলিয়ান মানগুলি একটি প্রশ্ন চিহ্নে শেষ হয়। এটির চেয়ে আর কোনও তাত্পর্য নেই।


28

আপনার উদাহরণে এটি পদ্ধতির নামের একটি অংশ। রুবিতে আপনি পদ্ধতির নামে উদ্দীপনা পয়েন্টগুলিও ব্যবহার করতে পারেন!

রুবিতে প্রশ্ন চিহ্নের আরেকটি উদাহরণ হ'ল টেরিনারি অপারেটর।

customerName == "Fred" ? "Hello Fred" : "Who are you?"

13
অ্যান্ডির উত্তরের প্রসারিত করতে আপনি এই জাতীয় জিনিসগুলি দেখতে পাবেন: গ্রাহক নাম == ব্যবহারকারীর তালিকাভুক্ত? ? ব্যবহারকারীর নাম: "আপনি কে?" দ্বৈত প্রশ্ন চিহ্ন নোট করুন
প্রশ্ন মার্ক

16

আপনার উদাহরণে

product.valid?

আসলে একটি ফাংশন কল এবং নামক একটি ফাংশন কল valid?। কনভেনশন অনুসারে ফাংশন নামের অংশ হিসাবে কিছু নির্দিষ্ট ধরণের "শর্তের জন্য পরীক্ষা" / বুলিয়ান ফাংশনগুলির একটি প্রশ্ন চিহ্ন থাকে।


41
answer.gsub! (/ ফাংশন /, 'পদ্ধতি')
গ্লেন জ্যাকম্যান

15

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

প্রাসঙ্গিক: কেন একটি পদ্ধতির নাম দিয়ে `? With দিয়ে একটি চলক নাম শেষ হতে পারে না?


9

আমি বিশ্বাস করি এটি বুলিয়ান যে জিনিসগুলির জন্য এটি কেবল একটি সম্মেলন। " IsValid" বলার মতো কিছুটা ।


1
সংক্ষিপ্ত এবং দুর্দান্ত মন্তব্যটি বিশেষত "" ইসওয়ালিড "বলার মত কিছুটা
কিক বাট্টোস্কি

2

এটি নিয়মিত প্রকাশেও ব্যবহৃত হয়, যার অর্থ "পূর্ববর্তী চরিত্রের সর্বাধিক এক পুনরাবৃত্তি"

উদাহরণস্বরূপ নিয়মিত /hey?/ প্রকাশটি " he" এবং " hey" স্ট্রিংয়ের সাথে মেলে ।


0

কার্নেল # পরীক্ষা থেকে পরীক্ষা পদ্ধতির প্রথম যুক্তির সাথে ব্যবহার করাও একটি সাধারণ সম্মেলন

irb(main):001:0> test ?d, "/dev" # directory exists?
=> true
irb(main):002:0> test ?-, "/etc/hosts", "/etc/hosts" # are the files identical
=> true

যেমন এখানে এই প্রশ্নে দেখা


3
এটি সম্পর্কিত নয় test, ?dএটি একটি শর্টকাট "d"testএটি প্রথম যুক্তির হিসাবে ওয়ান-চর স্ট্রিং নেয়, যাতে আপনি এটির সাথে test ?d, "/dev"বা কল করতে পারেন test "d", "/dev"
bfontaine
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.