গ্রোভিতে সুস্পষ্ট রিটার্ন স্টেটমেন্ট কখন লিখবেন?


21

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

কিছু উদাহরণ:

def foo(boolean bar) {
    // Not consistent
    if (bar) {
        return positiveBar()
    }
    negativeBar()
}

def foo2() {
    // Special Grails example
    def entitiy = new Entity(foo: 'Foo', bar: 'Bar')
    entity.save flush: true
    // Looks strange to me this way
    entity
}

পারলে একই রকম সমস্যা রয়েছে: একটি ফাংশন কোনও returnবিবৃতি না থাকায় সর্বশেষ মূল্যায়িত অভিব্যক্তি প্রদান করে returns ব্যক্তিগতভাবে, আমি সবসময় সুস্পষ্ট ব্যবহার returnকরি তবে গ্রোভিকে আমি চিনি না।
কিথ থম্পসন

2
ব্যক্তিগতভাবে আমি অন্তর্ভুক্ত return কেবল তখনই ব্যবহার করতাম যখন এটি পুরোপুরি পরিষ্কার হয়। toStringএকটি আদর্শ উদাহরণ: এটি একটি ওয়ান-লাইনার এবং গণনা করা মানটি অবশ্যই প্রত্যাবর্তনের মান। তবে আবারও, আমি গ্রোভিকে পর্যাপ্ত কর্মসূচি দিয়েছি না যে এটি বৃহত্তর সম্প্রদায় কী মনে করে তা খাপ খায় কিনা know
জোছিম সউর

উত্তর:


7

আমি অবশ্যই রিটার্নটি যুক্ত করব, কারণ এটি যে কোনও ব্যক্তির (নিজের সহ) যারা আসতে পারে এবং কোডটি পরে আপডেট করতে / বজায় রাখতে পারে তার উদ্দেশ্যে উদ্দেশ্যটি আরও পরিষ্কার করে দেয়।

অন্যথায় এটি টাইপিংয়ের ত্রুটির মতো দেখাবে।

অন্য জিনিসটি এমন ফাংশন / ক্লোজারগুলি ঘোষণা করা মনে রাখা উচিত যা প্রত্যাশিত 'শূন্য' হিসাবে প্রত্যাশিত হয় - ভবিষ্যতে রক্ষণাবেক্ষণকারীদের কাছে আপনি কী করার চেষ্টা করছেন তা আরও পরিষ্কার করে দেওয়ার জন্য।


17

স্পষ্টতা রাজা।

আপনার প্রোগ্রামটি লেখার পরে আপনার কোডটি পড়তে হবে এমন সহকর্মী প্রোগ্রামারের কাছে সর্বাধিক স্পষ্ট যা কাজ করুন।


8

রিটার্নের বিবৃতি ( উত্স ) বাদ দেওয়ার জন্য এখানে একটি যুক্তি রয়েছে :

গ্রোভির একটি স্বতন্ত্র বৈশিষ্ট্য

পটভূমি

আমি কিছুক্ষণের জন্য গ্রোভির সাথে কাজ করেছি, তবে একটি বৈশিষ্ট্য থেকে বিরত ছিলাম: মূল্যায়িত সর্বশেষ অভিব্যক্তিটির অন্তর্নিহিত প্রত্যাবর্তন। উদাহরণ স্বরূপ:

def getFoo() {
  def foo = null
  if (something) {
    foo = new Foo()
  }
  foo // no 'return' necessary
}

উপরের কোডে, আমি ফিরে ব্যবহার করব কারণ এটি আমার কাছে নিরাপদ বলে মনে হয়েছে। আমি এরিকের পোস্টের সাথে একমত হওয়ার প্রবণতা প্রকাশ করেছি (সুস্পষ্ট ফেরতের ক্ষেত্রে)

উদ্ঘাটন

আমি এটি এখনই পেয়েছি এবং গ্রোভির বর্ধিত সংগ্রহের পদ্ধতিগুলির জন্য এটি সমস্ত ধন্যবাদ।

সংগ্রহের পদ্ধতিটি বিবেচনা করুন। এটি একটি ফাংশন প্রয়োগ করে একটি তালিকা রূপান্তর করে। সিউডোকোডে:

[ a, b, c, d] => [ f(a), f(b), f(c), f(d) ]

এটি মাথায় রেখে, এখানে আরও একটি উদাহরণ দেওয়া হয়েছে:

class Composer {
  def name
  // def era, etc
}

def list = [ 'Bach', 'Beethoven', 'Brahms' ]

// the closure returns the new Composer object, as it is the last
// expression evaluated.

def composers = list.collect { item -> new Composer(name : item) }

assert 'Bach' == composers[0].name

ধারণাটি কেবল স্ট্রিংয়ের তালিকা থেকে রচয়িতা অবজেক্টের একটি তালিকা তৈরি করা। মন্তব্যে উল্লিখিত হিসাবে, সংগ্রহটি বন্ধ করতে পাস করা দুর্দান্ত প্রভাবের অন্তর্নিহিত রিটার্ন ব্যবহার করে। একসময় আমি এই ধারণাটি প্রকাশের জন্য 3-4 লাইন নেব taken

তবে এখন, এই কোডটি কেবল সংক্ষিপ্ত নয়: এটি সত্যই মার্জিত। পাইথনের মতো অন্যান্য ভাষার খুব স্মরণ করিয়ে দেয়।

টেক-হোম বার্তা

দুর্দান্ত গ্রোভির বৈশিষ্ট্যগুলির অনেকগুলি তালিকা রয়েছে। তবে আমরা খুব কমই তালিকাভুক্ত 'অন্তর্নিহিত রিটার্ন' দেখতে পাই। আমি একজন অনুরাগী: এটি অন্যান্য বৈশিষ্ট্যের জন্য চাকাগুলি গ্রীস করে।

আমি বুঝতে পারি এটি বহু ভাষায় উপলভ্য: আমি কেবল গ্রোভিতে এটি ব্যবহার করি নি। আমি সন্দেহ করি কয়েক সপ্তাহের মধ্যে আমি এটি ছাড়া বাঁচতে পারব না।

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