উদ্দেশ্য কি "!" এবং "?" পদ্ধতির নাম শেষে?


99

কখনও কখনও আমি রুবিতে এমন পদ্ধতিগুলি দেখতে পাই যে "আছে?" এবং "!" তাদের শেষে যেমন:

name = "sample_string"
name.reverse
name.reverse!
name.is_binary_data?

আমি ভাবছিলাম তাদের উদ্দেশ্য কী? এগুলি কি কেবল সিনট্যাক্স চিনিযুক্ত?


উত্তর:


161

এটি পঠনযোগ্যতার জন্য "কেবল চিনোকেটিং", তবে এর সাধারণ অর্থ রয়েছে:

  • !কিছু স্থায়ী বা সম্ভাব্য বিপজ্জনক পরিবর্তন সম্পাদন করে শেষ পদ্ধতিগুলি ; উদাহরণ স্বরূপ:
    • Enumerable#sortবস্তুটির সাজানো সংস্করণটি Enumerable#sort!স্থানে সাজানোর সময় প্রদান করে ।
    • রেলগুলিতে, ActiveRecord::Base#saveসংরক্ষণ ব্যর্থ হলে মিথ্যা ফেরত দেয়, যখন ActiveRecord::Base#save!ব্যতিক্রম উত্থাপন করে।
    • Kernel::exitকোনও স্ক্রিপ্ট থেকে প্রস্থান করার কারণ Kernel::exit!ঘটে, ততক্ষণে তা কোনও প্রস্থান হ্যান্ডলারকে বাইপাস করে।
  • ?একটি বুলিয়ানের পরিবর্তে শেষ পদ্ধতিগুলি যা বাক্যটির মতো কোড প্রবাহকে আরও স্বজ্ঞাত করে তোলে - if number.zero?"সংখ্যাটি শূন্য হলে" এর মতো পড়ে, তবে if number.zeroকেবল অদ্ভুত দেখাচ্ছে।

আপনার উদাহরণে, name.reverseবিপরীত স্ট্রিংয়ের মূল্যায়ন করে তবে কেবলমাত্র name.reverse!লাইনের পরে nameপরিবর্তনশীলটি উল্টো নামটি ধারণ করে। name.is_binary_data?" nameবাইনারি ডেটা?" বলে মনে হচ্ছে ।


22
একটি গুরুত্বপূর্ণ দ্রষ্টব্য হ'ল আপনার যদি কেবল একই ধরণের নন-ব্যাং পদ্ধতি থাকে তবে আপনার কাছে কেবল একটি ব্যাং পদ্ধতি থাকা উচিত। এই ঠাঁইটি পদ্ধতিটির "আরও আশ্চর্যজনক" সংস্করণটিকে "কম আশ্চর্যজনক" থেকে আলাদা করতে ব্যবহৃত হয়। আপনার যদি কেবল একটি পদ্ধতি থাকে তবে তার পরে কোনও পার্থক্যের প্রয়োজন হবে না এবং আপনার নামটি ধাক্কা দিয়ে দেওয়া উচিত নয়। দেখুন Array#clearউদাহরণস্বরূপ,। এটি অ্যারে সাফ করে। অ্যারে সাফ করা প্রাকৃতিকভাবে এটিকে পরিবর্তন করে। এটি সম্পর্কে অবাক হওয়ার মতো কিছু নেই, নামটি ইতিমধ্যে এটি পরিষ্কার করে দিয়েছে, তাই: কোনও ধাক্কা নেই। রুবি- forum.com/topic/176830#773946 দেখুন ।
Jörg ডব্লু মিটাগ

4
রুবি স্টাইল গাইড অনুসারে @ জার্গডব্লিউমিতাগ যা বলেছিলেন তাতে যুক্ত করে : সম্ভাব্য বিপজ্জনক পদ্ধতির নামগুলি (যেমন পদ্ধতিগুলি যা স্ব বা আর্গুমেন্টগুলিকে সংশোধন করে, প্রস্থান করে! সেই বিপজ্জনক পদ্ধতির নিরাপদ সংস্করণ উপস্থিত থাকলে একটি বিস্মৃত চিহ্ন ।
টড বার্ডসাল 21

4
সাবধান, এটি সবসময় হয় না। উদাহরণস্বরূপ, রুবি অ্যারে # কনক্যাট ডকসস.আরবি.এল.আর.আর.গঙ্গ /en / ২.০.০১/আরয়ে এইচটিএমএল # মেমোডি- আই- কনক্যাট । আপনি যেখানে খারাপভাবে পোড়াতে পারেন তা হ'ল মাইএ্যাকটিভরেকর্ডমোডেল কোডলম_নামস কোডক্যাট (...) এর মতো। পরিবর্তে কনক্যাট করার আগে আপনাকে অবশ্যই এটি ক্লোন করতে হবে।
উইনটন্ডেশং

16

প্রশ্ন চিহ্ন নির্দেশ করে যে পদ্ধতিটি বুলিয়ান দেয় returns ইতিমধ্যে এখানে উত্তর:

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

ঠুং ঠুং শব্দ নির্দেশ করে যে পদ্ধতিটি নিজেই বস্তুটিতে কাজ করে। ইতিমধ্যে এখানে উত্তর:

রুবি পদ্ধতিতে উদ্দীপনা চিহ্নগুলি কেন ব্যবহার করা হয়?


8

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


5

- আমি মনে করি - সংখ্যাগরিষ্ঠ প্রোগ্রামিং ভাষার বিপরীতে ...

রুবি, পদ্ধতিগুলিকে প্রশ্ন চিহ্ন বা বিস্ময়কর চিহ্ন দিয়ে শেষ করার অনুমতি দেওয়া হয়েছে।

সম্মেলনের মাধ্যমে, প্রশ্নগুলির উত্তর দেওয়ার পদ্ধতিগুলি (যেমন অ্যারে # খালি? প্রাপক খালি থাকলে সত্য প্রত্যাবর্তন করে) প্রশ্ন চিহ্নে শেষ হয়।

সম্ভাব্য "বিপজ্জনক" পদ্ধতিগুলি (অর্থাত্ স্বয়ং বা আর্গুমেন্টগুলিকে সংশোধনকারী পদ্ধতিগুলি, প্রস্থান করুন! ইত্যাদি) বিস্মৃত চিহ্নের সাথে শেষ হয়।

থেকে: http://www.ruby-lang.org/en/docamentation/ruby-from-other-languages/ , বিভাগ মজার পদ্ধতির নাম


4
এছাড়াও পদ্ধতিটি শেষ হওয়ার সাথে সাথে ?প্রাকটিক পদ্ধতি বলে।
ওয়াসিম

1

সাবধান, এটি সবসময় হয় না। উদাহরণস্বরূপ, রুবি অ্যারে # কনট্যাট http://docs.ruby-lang.org/en/2.0.0/Array.html#method-i-concat

আপনি যেখানে খারাপভাবে পোড়াতে পারেন তা হ'ল কিছু MyActiveRecordModel.column_names.concat([url])। পরবর্তীতে মাইএ্যাকটিভরেকর্ডমোডেল সম্পর্কিত কলগুলি মাইএ্যাকটিভরেকর্ডমোডেল এবং নিক্ষেপের জন্য 'url' এর একটি কলাম অনুসন্ধান করার চেষ্টা করবে।

পরিবর্তে কনক্যাট করার আগে আপনাকে অবশ্যই এটি ক্লোন করতে হবে। ভাগ্যক্রমে আমার পরীক্ষার স্যুটটি এটি ধরা পড়ে, তবে ..!

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