আমি রুবির এক লাইনে কোনও পদ্ধতি কীভাবে সংজ্ঞায়িত করব?


92

কি def greet; puts "hello"; endরুবি এক লাইনে একটি পদ্ধতি নির্ধারণ করার একমাত্র উপায়?


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

উত্তর:


104

আপনি যদি প্রথম বন্ধনী ব্যবহার করেন তবে আপনি সেমিকোলন ব্যবহারের প্রয়োজনীয়তা এড়াতে পারবেন:

def hello() :hello end

4
এটি কি সেমিকোলন ব্যবহারের চেয়ে বেশি দীর্ঘ ...?
অ্যাপলিস মনিকা

76

শুধু সম্পূর্ণ নতুন উত্তর দিন:

সাধারণভাবে একক-লাইন পদ্ধতি এড়িয়ে চলুন। যদিও তারা বন্য অঞ্চলে কিছুটা জনপ্রিয়, তাদের সংজ্ঞা বাক্য গঠন সম্পর্কে কয়েকটি অদ্ভুততা রয়েছে যা তাদের ব্যবহারকে অবাঞ্ছিত করে তোলে। যে কোনও হারে - একক-লাইন পদ্ধতিতে একাধিক অভিব্যক্তি থাকতে হবে না

# bad
def too_much; something; something_else; end

# okish - notice that the first ; is required
def no_braces_method; body end

# okish - notice that the second ; is optional
def no_braces_method; body; end

# okish - valid syntax, but no ; make it kind of hard to read
def some_method() body end

# good
def some_method
  body
end

নিয়মের একটি ব্যতিক্রম খালি দেহের পদ্ধতি।

# good
def no_op; end

থেকে bbatsov / রুবি-শৈলী-নির্দেশিকা


39
def add a,b; a+b end

সেমিকোলন হ'ল রুবির ইনলাইন স্টেটমেন্ট টার্মিনেটর

অথবা আপনি define_methodপদ্ধতিটি ব্যবহার করতে পারেন । (সম্পাদনা করুন: এটি রুবি ১.৯ এ অবহিত)

define_method(:add) {|a,b| a+b }

4
দেখে মনে হয় না যে রুবি 2+
michau

9

অন্য উপায়:

define_method(:greet) { puts 'hello' }

আপনি যদি সংজ্ঞা দেওয়ার সময় পদ্ধতির জন্য নতুন সুযোগটি প্রবেশ করতে না চান তবে ব্যবহার করা যেতে পারে।


NoMethodError: বেসরকারী পদ্ধতি `Define_method 'অবজেক্টের জন্য আহ্বান করেছে: রুবিতে ক্লাস 1.9.3
জেরেড

4
define_methodরুবি ১.৯
এডগারুনার

8

তবুও অন্য উপায়:

def greet() return 'Hello' end

13
রুবিতে, কোনও পদ্ধতির রিটার্ন মান হ'ল সর্বশেষ বিবৃতিতে ফিরে আসা মান। আপনার returnএখানে দরকার নেই কারণ এটি কোনও প্রহরী ধারা নয়।
ড্যামিয়েন

4
উত্সাহিত কারণ, যদিও এটির প্রয়োজন হয় না , returnরুবি সম্পর্কে কম পারদর্শী (বা তার সাথে পরিচিত) তাদের জন্য পঠনযোগ্যতা যুক্ত করতে পারে। সেই এক YMMV জিনিষ ...
Potherca
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.