স্পষ্টভাবে রুবিতে ফিরে আসা কি ভাল স্টাইল নয়?


155

পাইথনের পটভূমি থেকে আগত, যেখানে সর্বদা "এটি করার সঠিক উপায়" থাকে (একটি "পাইথোনিক" উপায়) যখন স্টাইলে আসে, আমি ভাবছিলাম যে রুবির ক্ষেত্রেও এটি বিদ্যমান কিনা? আমি আমার নিজস্ব স্টাইলের দিকনির্দেশগুলি ব্যবহার করছি তবে আমি আমার উত্স কোডটি প্রকাশ করার বিষয়ে চিন্তাভাবনা করছি এবং আমি এটির অস্তিত্বের যে কোনও লিখিত নিয়ম মেনে চলতে চাই।

returnপদ্ধতিতে স্পষ্টভাবে টাইপ করা কি "দ্য রুবি ওয়ে" ? আমি এটি সাথে এবং বাইরেও দেখেছি, তবে এটি করার কোনও সঠিক উপায় আছে কি? এটি করার উপযুক্ত সময় কি আছে ? উদাহরণ স্বরূপ:

def some_func(arg1, arg2, etc)
  # Do some stuff...
  return value # <-- Is the 'return' needed here?
end

3
এটি একটি খুব পুরানো প্রশ্ন, তবে যাদের একই প্রশ্ন রয়েছে তাদের জন্য, এলওভার্ট রুবি বইটি অত্যন্ত প্রস্তাবিত। এটি আইডোমেটিক রুবি লেখার পরিচিতির মতো কোনও স্টাইল গাইড নয়। আমি আশা করি আরও মানুষ এটি পড়তে পারে!
ব্রায়ান প্রিয়

রুবিতে গড়ে ওঠা একটি বৃহত লিগ্যাসি অ্যাপটি উত্তরাধিকার সূত্রে প্রাপ্ত কেউ হিসাবে, আপনি এই প্রশ্নটি জিজ্ঞাসা করেছেন বলে আমি অনেক প্রশংসা করি। এটি একটি উত্সাহের দাবিদার। এটি আমাদের উত্তরাধিকার অ্যাপ্লিকেশন জুড়ে থাকে। এই টিমটিতে আমার একটি কাজ হ'ল কোডবেস উন্নতি করা (রুবিতে নতুন হওয়ার সময় শক্ত)।
স্টিভার্স

উত্তর:


226

পুরানো (এবং "উত্তর") প্রশ্ন, তবে আমি উত্তর হিসাবে আমার দুটি সেন্টে টস করব।

টিএল; ডিআর - আপনার দরকার নেই তবে এটি কিছু ক্ষেত্রে আপনার কোডটিকে আরও অনেক স্পষ্ট করতে পারে।

যদিও একটি সুস্পষ্ট রিটার্ন ব্যবহার না করা "রুবি ওয়ে" হতে পারে তবে এটি অপরিচিত কোড সহ কর্মরত প্রোগ্রামারদের কাছে বিভ্রান্ত করছে বা রুবির এই বৈশিষ্ট্যটির সাথে অপরিচিত।

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

def plus_one_to_y(x)
    @y = x + 1
end

এর অর্থ কি এমন কোনও ফাংশন যা কোনও মান ফিরিয়ে দিয়েছে, না? এটি উভয়ই উদাহরণটি পরিবর্তনশীল হিসাবে নির্ধারিত করে, এবং নির্ধারিত মানটিও প্রদান করে, কারণ এটি বিকাশকারী বলতে কী বোঝায় তা বলা শক্ত।

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

def plus_one_to_y(x)
    @y = x + 1
    puts "In plus_one_to_y"
end

যদি কোনও কিছু প্রত্যাশিত মান আশা করে তবে ফাংশনটি নষ্ট হয়ে গেছে । যদি কোনও কিছুই প্রত্যাবর্তিত মান আশা করে না, তবে তা ঠিক আছে। স্পষ্টতই যদি কোথাও কোড শৃঙ্খলার নিচে থাকে, যেটিকে কল করে এমন কোনও কিছু প্রত্যাবর্তিত মানের প্রত্যাশা করে, এটি ব্যর্থ হতে চলেছে কারণ এটি প্রত্যাশা করে যা ফিরে পাচ্ছে না।

এখন আসল প্রশ্নটি হ'ল: সত্যিকার অর্থে কোনও প্রত্যাশিত মূল্য কি প্রত্যাশা করেছিল? এটি কিছু ভেঙেছিল নাকি? ভবিষ্যতে কি কিছু ভেঙে যাবে? কে জানে! সমস্ত কলগুলির কেবলমাত্র একটি সম্পূর্ণ কোড পর্যালোচনা আপনাকে জানাতে দেবে।

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

সুতরাং আমাদের ছোট ডেমো ফাংশনের ক্ষেত্রে, ধরে নিলাম আমরা এটির কোনও মান ফেরত চাইব, এটি এইভাবে লেখা হবে ...

def plus_one_to_y(x)
    @y = x + 1
    puts "In plus_one_to_y"
    return @y
end

এবং এটি যে কোনও প্রোগ্রামারের কাছে খুব স্পষ্ট হবে যে এটি কোনও মান ফিরিয়ে দেয় এবং এটি উপলব্ধি না করে এটিকে ভাঙ্গা তাদের পক্ষে আরও শক্ত।

বিকল্পভাবে, কেউ এটি এর মতো লিখতে পারে এবং রিটার্নের বিবৃতি ছেড়ে দিতে পারে ...

def plus_one_to_y(x)
    @y = x + 1
    puts "In plus_one_to_y"
    @y
end

তবে কেন ফেরত শব্দটি বাদ দিয়ে বিরক্ত করবেন? কেন এটি কেবল সেখানে না রেখে 100% পরিষ্কার হচ্ছে যা হচ্ছে? এটি আপনার কোড সম্পাদন করার ক্ষমতার উপর আক্ষরিক কোনও প্রভাব ফেলবে না।


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

6
অন্তর্নিহিত রিটার্নগুলিতে গুগলিংয়ের সময় আমি প্রশ্নটি পেয়েছি, কারণ আমি সবেমাত্র এতে জ্বলে উঠেছিলাম। আমি কোনও ফাংশনের শেষে কিছু যুক্তি যুক্ত করেছি যা স্পষ্টতই কিছু ফিরিয়ে দিচ্ছিল। এটির বেশিরভাগ কলগুলি ফিরে আসা মূল্যটিকে (বা পরীক্ষা করে) কিছু দেয় নি তবে একটি করেছিল - এবং এটি ব্যর্থ হয়েছিল। ভাগ্যক্রমে কিছু কার্যকরী পরীক্ষায় এটি প্রদর্শিত হয়েছিল।
টিম হল্ট

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

25
শব্দটি returnকোডটিতে অর্থপূর্ণ অর্থ যুক্ত করে, তবে কেন নয়? এটি খুব কমই ভার্জোজ - আমরা 5 টি লাইন বনাম 3 বলছি না, কেবল একটি শব্দ। returnকোডটি আসলে কী করে তা প্রকাশ করার জন্য আমি কমপক্ষে ফাংশনগুলিতে (সম্ভবত ব্লকগুলিতে নয়) দেখতে পছন্দ করব। কখনও কখনও আপনাকে মাঝের ফাংশনটি ফিরে আসতে হয় - returnকেবলমাত্র আপনি পারেন তাই শেষ লাইনে শেষ কীওয়ার্ডটি ছেড়ে যাবেন না। আমি মোটেই ভার্বোসটির পক্ষপাতী নই, তবে আমি ধারাবাহিকতার পক্ষে favor
mindplay.dk

6
এটি একটি দুর্দান্ত উত্তর। তবে এটি এখনও এই ঝুঁকিটি ছেড়ে দেয় যে আপনি কোনও রুবি পদ্ধতি লিখতে চান যা কোনও প্রক্রিয়া (ওরফে ফাংশন রিটার্নিং ইউনিট) হতে চায় side_effect()এবং উদাহরণস্বরূপ এবং অন্য বিকাশকারী (আব) আপনার পদ্ধতির অন্তর্ভুক্ত ফেরত মানটি ব্যবহার করার সিদ্ধান্ত নেন। এটি ঠিক করার জন্য, আপনি আপনার পদ্ধতিগুলি স্পষ্টভাবে তৈরি করতে পারেন return nil
অ্যালেক্স ডিন

66

নং গুড রুবি শৈলী সাধারণত শুধুমাত্র একটি জন্য একটি সুনির্দিষ্ট আয় ব্যবহার করেন গোড়ার দিকে প্রত্যাবর্তন । কোড ন্যূনতমতা / অন্তর্নিহিত যাদুতে রুবি বড়।

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


116
কোড মিনিমালিজম এর বিন্দুটি কী হয় যদি এর ফলে বিভ্রান্তির সর্বাধিকতা আসে?
জোনোনো

@ জোনক্রোয়েল এর পরিবর্তে ডকুমেন্টেশন সর্বাধিকীকরণের ফলস্বরূপ হওয়া উচিত।
জাজপি

29
@ জাজপপি যদি আপনার কোডটি ভারীভাবে নথিভুক্ত করতে হয় তবে এটি বোঝা যায় যে আপনি ন্যূনতমবাদের অনুশীলন করছেন না, আপনি কোড গল্ফ অনুশীলন করছেন ।
শোয়ার্ন

2
এটি চূড়ান্ত রিটার্ন বাদ দেওয়ার জন্য বিভ্রান্তিকর নয়, এটি অন্তর্ভুক্ত করতে বিভ্রান্ত করছে - একজন রুবি বিকাশকারী হিসাবে returnইতিমধ্যে ফাংশনটির প্রথম দিকের প্রস্থান হিসাবে একটি ইতিবাচক অর্থ রয়েছে।
ডিভন পার্সসনস

14
@ ডেভনপারসনস পৃথিবীতে কেউ কীভাবে প্রথম প্রান্তে কোনওভাবে শেষ প্রান্তে বিভ্রান্ত করতে পারে return?
দার্থপাগিয়াস

31

আমি ব্যক্তিগতভাবে returnকীওয়ার্ডটি আমি যাকে বলি ফাংশনাল পদ্ধতিগুলি , অর্থাত্ মূলত তাদের প্রত্যাবর্তনের মূল্যের জন্য নির্বাহ করা হয় এমন পদ্ধতি এবং প্রাথমিকভাবে পার্শ্ব প্রতিক্রিয়াগুলির জন্য কার্যকর করা পদ্ধতিগত পদ্ধতিগুলি distingu সুতরাং, যে পদ্ধতিগুলিতে রিটার্ন মানটি গুরুত্বপূর্ণ, returnসেগুলি ফেরতের মানটির দিকে দৃষ্টি আকর্ষণ করার জন্য একটি অতিরিক্ত কীওয়ার্ড পান।

পদ্ধতিগুলি কল করার সময় আমি একই তফাতটি ব্যবহার করি: কার্যকরী পদ্ধতিগুলি প্রথম বন্ধনী পায়, পদ্ধতিগত পদ্ধতিগুলি পায় না।

এবং সর্বশেষে তবে সর্বনিম্ন নয়, ব্লকগুলির সাথে আমিও এই পার্থক্যটি ব্যবহার করি: কার্যকরী ব্লকগুলি কোঁকড়ানো ধনুর্বন্ধনী, প্রক্রিয়াজাতীয় ব্লকগুলি (যেমন ব্লকগুলি যে "কিছু করে" কিছু পান) পায় do/ পায় end

তবে আমি এ সম্পর্কে ধর্মীয় না হওয়ার চেষ্টা করি: ব্লক, কোঁকড়া ধনুর্বন্ধনী এবং do/ endআলাদা আলাদা প্রাধান্য সহ, এবং একটি অভিব্যক্তি ছিন্ন করার জন্য স্পষ্টত বন্ধনী যুক্ত করার পরিবর্তে আমি কেবল অন্য স্টাইলে চলে যাই। একই পদ্ধতি কলিংয়ের ক্ষেত্রে: প্যারামিটার তালিকার চারপাশে যদি প্রথম বন্ধনী যুক্ত করা কোডটি আরও পাঠযোগ্য করে তোলে তবে আমি এটি করি, এমনকি যদি প্রশ্নে পদ্ধতিটি প্রকৃতির পদ্ধতিগত হয়।


1
এই মুহুর্তে আমি কোনও "ওয়ান-লাইনার" এর একটি রিটার্ন বাদ দিচ্ছি, যা আপনি যা করছেন তার অনুরূপ, এবং আমি সমস্ত কিছু একইভাবে করি। জেনে রাখা ভাল যে আমি আমার স্টাইলে পুরোপুরি বন্ধ নেই। :)
সাশা চেদিগোভ

@ জর্জি: আপনি কি আপনার কোডটিতে প্রারম্ভিক রিটার্ন ব্যবহার করেন? এটি কি আপনার পদ্ধতিগত / কার্যকরী প্রকল্পের সাথে কোনও বিভ্রান্তির সৃষ্টি করে?
অ্যান্ড্রু গ্রিম

1
@ অ্যান্ড্রু গ্রিম: হ্যাঁ, এবং হ্যাঁ। আমি এটি উল্টানোর কথা ভাবছি। আমার পদ্ধতিগুলির বিশাল অংশগুলি উল্লেখযোগ্যভাবে স্বচ্ছ / খাঁটি / কার্যকরী / আপনি যেভাবেই এটিকে কল করতে চান তাই সেখানে সংক্ষিপ্ত রূপটি ব্যবহার করা বোধগম্য। এবং কার্যকরী শৈলীতে লিখিত পদ্ধতিগুলিতে প্রারম্ভিক রিটার্ন না পাওয়া যায়, যেহেতু এটি "পদক্ষেপ" ধারণাটি বোঝায় যা খুব কার্যকরী নয়। যদিও, আমি মাঝখানে রিটার্ন পছন্দ করি না। আমি হয় এগুলিকে প্রারম্ভিক হিসাবে প্রহরী হিসাবে বা শেষে প্রবাহকে সহজ করার জন্য ব্যবহার করি।
জার্গ ডব্লু মিটাগ

দুর্দান্ত উত্তর, তবে প্রক্রিয়াগত পদ্ধতিগুলি () এবং কার্যকরী পদ্ধতি ছাড়াই কল করা ভাল - এটির জন্য আমার উত্তরটি নীচে দেখুন
অ্যালেক্স ডিন

13

আসলে গুরুত্বপূর্ণ বিষয়টির মধ্যে পার্থক্য করা:

  1. ফাংশন - পদ্ধতিগুলি তাদের ফেরতের মূল্যের জন্য কার্যকর করা হয়
  2. পদ্ধতি - তাদের পার্শ্ব প্রতিক্রিয়া জন্য মৃত্যুদন্ড কার্যকর

এগুলি আলাদা করার রুবির কোনও নেটিভ পদ্ধতি নেই - যা আপনাকে কোনও প্রক্রিয়া লেখার ক্ষেত্রে ঝুঁকির মধ্যে ফেলে দেয় side_effect()এবং অন্য কোনও বিকাশকারী আপনার পদ্ধতির অন্তর্নিহিত মূল্যের মানটিকে মূলত অপব্যবহার করার সিদ্ধান্ত নেন (এটি মূলত একে অপবিত্র ফাংশন হিসাবে বিবেচনা করে)।

এটি সমাধানের জন্য, স্কালা এবং হাস্কেলের বইয়ের একটি পাতা বের করুন এবং আপনার পদ্ধতিগুলি স্পষ্টভাবে ফিরে আসুন nil(ওরফে Unitবা ()অন্য ভাষায়)।

আপনি যদি এটি অনুসরণ করেন তবে স্পষ্টত returnবাক্য গঠন ব্যবহার করা বা কেবল ব্যক্তিগত স্টাইলের বিষয় হয়ে ওঠে না।

ফাংশন এবং পদ্ধতিগুলির মধ্যে আরও পার্থক্য করার জন্য:

  1. কোঁকড়ানো ধনুর্বন্ধনী সহ ফাংশনাল ব্লক, এবং এর সাথে পদ্ধতিগত ব্লকগুলি লেখার জার্গ ডব্লিউ মিট্টাগের দুর্দান্ত ধারণাটি অনুলিপি করুন do/end
  2. আপনি যখন পদ্ধতিগুলি চালু করেন তখন ব্যবহার করুন (), যখন আপনি যখন ফাংশনগুলি প্রার্থনা করেন তখন করবেন না

নোট করুন যে জার্গ ডব্লু মিটাগ প্রকৃত পক্ষে চারপাশে অন্যান্য উপায়ের পক্ষে ছিলেন - ()পদ্ধতিগুলির জন্য এড়ানো - তবে এটি পরামর্শযোগ্য নয় কারণ আপনি চান পার্শ্ব-প্রভাব পদ্ধতি পদ্ধতির অনুরোধগুলি ভেরিয়েবলগুলির থেকে স্পষ্টভাবে পৃথক হওয়া উচিত, বিশেষত যখন আর্টিটি 0 হয় তার জন্য পদ্ধতি আহ্বানের ক্ষেত্রে স্কালা শৈলী গাইড দেখুন for বিবরণ।


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

2
আপনি ঠিক ডিভন - function_aএকটি গাছ থাকতে পারে procedure_..., কল হিসাবে প্রকৃতপক্ষে procedure_aএকটি গাছ থাকতে পারে function_...কল। স্কালার মতো তবে হাস্কেলের মতো নয়, রুবিতে কোনও গ্যারান্টি থাকতে পারে না যে কোনও ফাংশন পার্শ্ব প্রতিক্রিয়াশীল নয়।
অ্যালেক্স ডিন

8

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


বলা হচ্ছে যে, স্পষ্টত returns ব্যবহারের মূল যুক্তি হ'ল এটি অন্যান্য ভাষা থেকে আসা লোকদের জন্য বিভ্রান্তিকর।

  • প্রথমত, এটি পুরোপুরি রুবির সাথে একচেটিয়া নয়। উদাহরণস্বরূপ পার্লেরও অন্তর্নিহিত রিটার্ন রয়েছে।
  • দ্বিতীয়ত, এটি প্রয়োগ করে এমন বেশিরভাগ লোক আলগোল ভাষা থেকে আসে Al এগুলির বেশিরভাগই রুবির তুলনায় "নিম্ন স্তরের" , সুতরাং কিছু কাজ করার জন্য আপনাকে আরও কোড লিখতে হবে।

জাভাতে পদ্ধতির দৈর্ঘ্যের (গেটার্স / সেটটার বাদে) একটি সাধারণ হিউরিস্টিক হ'ল একটি পর্দা । সেক্ষেত্রে আপনি সম্ভবত পদ্ধতি সংজ্ঞাটি দেখতে পাচ্ছেন না এবং / বা আপনি কোথা থেকে ফিরে আসছেন সে সম্পর্কে ইতিমধ্যে ভুলে গেছেন।

অন্যদিকে, রুবিতে 10 লাইনের চেয়ে কম লম্বা পদ্ধতিগুলিতে লেগে থাকা ভাল । এটি দেওয়া হলেও, কেউ ভাববেন যে কেন তাকে ~ 10% আরও বিবৃতি লিখতে হবে, যখন তারা স্পষ্টভাবে বোঝানো হয়েছে।


যেহেতু রুবির অকার্যকর পদ্ধতি নেই এবং সবকিছুই অনেক বেশি সংক্ষিপ্ত, তাই আপনি যদি স্পষ্টতই যান তবে আপনি কোনও সুবিধার জন্য কেবল ওভারহেড যুক্ত করছেন return


1
"এটি একটি কনভেনশন যা সম্প্রদায় কঠোরভাবে অনুসরণ করে" আমার অভিজ্ঞতা হ'ল না, লোকে খুব অভিজ্ঞ রুবি বিকাশকারী না হলে এগুলি কঠোরভাবে অনুসরণ করে না।
টিম হল্ট

1
@ টিমহোল্ট আমি তখন অবশ্যই খুব ভাগ্যবান হতাম। (:
এনডিএনভেনকভ

1
@ এবং সম্পূর্ণরূপে একমত। গুরুত্বপূর্ণ বিষয়টি হ'ল যখন কোনও পদ্ধতি (বা শ্রেণি) 5/100 লাইন অতিক্রম করতে শুরু করে, তখন আপনি কী সম্পাদন করতে চাইছেন তা পুনর্বিবেচনা করা ভাল ধারণা। সত্যই সান্দি বিধি একটি স্বেচ্ছাচারী গোড়ামির বিপরীতে কোড সম্পর্কে চিন্তাভাবনা করার জন্য একটি জ্ঞানীয় কাঠামো। আমি যে কোডটি পেয়েছি তার বেশিরভাগই সমস্যাযুক্ত নয় কারণ এটি কৃত্রিমভাবে সীমাবদ্ধ - এটি সাধারণত বিপরীত - একাধিক দায়িত্ব, ক্লাসের চেয়ে দীর্ঘতর পদ্ধতি সহ ক্লাস। মূলত খুব বেশি লোক "হাঙ্গর লাফিয়ে" - মিশ্রণের দায়িত্বগুলি।
ব্রায়ান প্রিয়

1
কখনও কখনও কনভেনশন এখনও একটি খারাপ ধারণা। এটি একটি স্টাইলিস্টিক সম্মেলন যা যাদুবিদ্যার উপর নির্ভর করে, রিটার্নের ধরণগুলি অনুমান করা শক্ত করে তোলে। 7 কীস্ট্রোক সংরক্ষণ করা ছাড়া অন্য কোনও উপকারের প্রস্তাব দেয় না এবং প্রায় অন্যান্য সমস্ত ভাষার সাথে মিলিত হয়। রুবি যদি কখনও পাইথন 3 স্টাইলের একীকরণ এবং সরলীকরণ পাস করেন তবে আমি আশা করব যে কাটা ব্লকের মধ্যে অন্তর্ভুক্ত কোনও কিছুই প্রথম।
শায়নে

2
স্পষ্টভাবে বাদে এটি আসলে জিনিসগুলি পড়া সহজ করে না! যাদু এবং বোধগম্যতা এমে জিনিস নয়।
শায়নে

4

আমি বেন হিউজেসের সাথে একমত এবং টিম হল্টের সাথে একমত নই, কারণ প্রশ্নটি পাইথন এটির নির্দিষ্ট উপায়ের উল্লেখ করে এবং জিজ্ঞাসা করে যে রুবির একই মান রয়েছে কিনা।

এটা করে.

এটি ভাষার এমন একটি সুপরিচিত বৈশিষ্ট্য যে যে কেউ রুবিতে কোনও সমস্যার ডিবাগ করবে বলে আশা করা উচিত এটি সম্পর্কে জেনে রাখা উচিত।


3
আমি তত্ত্বের সাথে আপনার সাথে একমত, কিন্তু বাস্তবে প্রোগ্রামাররা ভুল করে এবং গণ্ডগোল করে। ঘটনাচক্রে, আমরা সকলেই জানি যে আপনি "==" শর্তাধীন এবং "=" ব্যবহার করেন না, তবে আমরা সমস্ত ভুল আগেই করেছি এবং পরে তা বুঝতে পারি নি।
টিম হল্ট

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

3
যথেষ্ট ফর্সা। আমি বলছি যে আপনি যে স্টাইলটি উল্লেখ করেছেন তা যদি আপনি সতর্ক না হন তবে ভুল হতে পারে। আমার অভিজ্ঞতার ভিত্তিতে আমি ব্যক্তিগতভাবে আলাদা স্টাইলের পক্ষে পরামর্শ দিই।
টিম হল্ট

1
@ টিমহোল্ট যাইহোক, স্টাইল গাইড লেখার আগে এই প্রশ্নটি জিজ্ঞাসা করা হয়েছিল, সুতরাং যে উত্তরগুলি অসম্মতিযুক্ত তা অগত্যা ভুল নয়, কেবল পুরানো। যদিও আমি এখানে কোনওভাবে হোঁচট খেয়েছি এবং আমার সরবরাহ করা লিঙ্কটি দেখতে পেলাম না, তাই আমি বুঝতে পেরেছিলাম যে অন্য কেউ এখানেও শেষ হতে পারে।
ডিভন

1
এটি কোনও অফিসিয়াল "স্ট্যান্ডার্ড" নয়। রুবোকপ দ্বারা ব্যবহৃত এবং উপরে ডিভন পার্সসনের দাবির সাথে উপরে লিঙ্কযুক্ত রুবি স্টাইল গাইডটি একটি নন-কোর রুবি হ্যাকার দ্বারা তৈরি করা হয়েছে। সুতরাং ডিভনের মন্তব্যটি সত্যই সহজ। অবশ্যই আপনি এটি ব্যবহার করতে পারেন তবে এটি একটি মান নয়।
শেভি

1

আপনি বেশিরভাগ অংশের জন্য কোন স্টাইলটিকে পছন্দ করেন এটি এটির বিষয়। আপনি যদি কোনও পদ্ধতির মাঝে কোথাও থেকে ফিরে আসতে চান তবে আপনাকে কীওয়ার্ড রিটার্নটি ব্যবহার করতে হবে।


0

যেমন বেন বলেছেন। 'রুবি পদ্ধতির রিটার্ন মান হ'ল ফাংশন বডির সর্বশেষ বিবৃতিটির রিটার্ন মান' এর ফলে রিটার্ন কীওয়ার্ডটি বেশিরভাগ রুবি পদ্ধতিতে খুব কমই ব্যবহৃত হয়।

def some_func_which_returns_a_list( x, y, z)
  return nil if failed_some_early_check


  # function code 

  @list     # returns the list
end

4
আপনার উদ্দেশ্যটি এখনও পরিষ্কার থাকলে আপনি "রিটার্ন নীল ব্যর্থ_সাম_প্রিয়_চেক" লিখতে পারেন
মাইক উডহাউস

@ গিশু আমি আসলে নামটির নয়, তবে এই বিবৃতি সম্পর্কে অভিযোগ করছিলাম।
অ্যান্ড্রু গ্রিম

@ অ্যান্ড্রু .. ওহ নিখোঁজ :)। বুঝেছি. মাইকের কাছ থেকেও অন্যান্য মন্তব্যকে প্রশান্ত করার জন্য স্থির।
গিশু

না কেন if failed_check then nil else @list end? এটি সত্যই কার্যকর
cdunn2001

@ cdunn2001 তবে কেন অন্যটি কার্যকর হয় তা নিয়ে পরিষ্কার নয় .. এই শৈলীর কারণ হ'ল এটি প্রাথমিক প্রস্থানের মাধ্যমে বাসা বাঁধাকে হ্রাস করে। আইএমএইচও আরও পাঠযোগ্য।
গিশু
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.