เมื่อใดที่ต้องเขียนคำสั่ง return ที่ชัดเจนใน Groovy


21

ในขณะนี้ฉันกำลังทำงานในโครงการ Groovy / Grails (ซึ่งฉันค่อนข้างใหม่) และฉันสงสัยว่าเป็นวิธีปฏิบัติที่ดีที่จะละเว้นreturnคำหลักในวิธีการของ Groovy หรือไม่ เท่าที่ฉันรู้ว่าคุณต้องแทรกคำหลักเช่นสำหรับคำสั่งป้องกันดังนั้นหนึ่งควรใช้มันทุกที่อื่นหรือไม่ ในความคิดของฉัน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
}

มีปัญหาที่คล้ายกันใน Perl: ฟังก์ชั่นส่งกลับการแสดงออกที่ประเมินล่าสุดในกรณีที่ไม่มีreturnคำสั่ง โดยส่วนตัวฉันใช้ความชัดเจนเสมอreturnแต่ฉันไม่รู้จัก Groovy
Keith Thompson

2
โดยส่วนตัวแล้วฉันจะใช้ความหมายโดยนัยreturn ก็ต่อเมื่อมันชัดเจนอย่างสมบูรณ์ toStringเป็นตัวอย่างทั่วไป: มันเป็นหนึ่งซับและการคำนวณค่าเห็นได้ชัดว่าเป็นค่าตอบแทน แต่จากนั้นอีกครั้งฉันไม่ได้ตั้งโปรแกรม Groovy ให้รู้ว่าเหมาะสมกับสิ่งที่ชุมชนขนาดใหญ่คิดหรือไม่
Joachim Sauer

คำตอบ:


7

ฉันมั่นใจว่าจะเพิ่มการส่งคืนเนื่องจากทำให้ผู้อื่น (รวมถึงตัวคุณเอง) ที่จะมาแจ้งความประสงค์ชัดเจนและสามารถอัปเดต / บำรุงรักษาโค้ดในภายหลังได้

มิฉะนั้นอาจดูเหมือนข้อผิดพลาดในการพิมพ์

อีกสิ่งหนึ่งคืออย่าลืมประกาศฟังก์ชั่น / การปิดที่คาดว่าจะคืนค่าโมฆะเป็น 'โมฆะ' - อีกครั้งเพื่อให้ชัดเจนกับผู้ดูแลในอนาคตสิ่งที่คุณพยายามทำ



8

นี่คืออาร์กิวเมนต์สำหรับการข้ามข้อความสั่งคืน ( ที่มา ):

คุณลักษณะที่เข้าใจใน Groovy

พื้นหลัง

ฉันได้ทำงานกับ Groovy มาระยะหนึ่งแล้ว แต่กลับไม่ชอบกับฟีเจอร์เดียวนั่นคือการกลับมาโดยปริยายของนิพจน์สุดท้ายที่ประเมิน ตัวอย่างเช่น:

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

ในรหัสข้างต้นฉันจะใช้ผลตอบแทนเพราะรู้สึกปลอดภัยสำหรับฉัน ฉันมักจะเห็นด้วยกับโพสต์ของ Eric (เกี่ยวกับผลตอบแทนที่ชัดเจน)

การเปิดเผย

ฉันเข้าใจแล้วตอนนี้ทุกอย่างต้องขอบคุณวิธีการรวบรวมที่ได้รับการปรับปรุงใน Groovy

พิจารณาวิธีการรวบรวม มันแปลงรายการโดยใช้ฟังก์ชั่น ใน pseudocode:

[ 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 บรรทัดเพื่อแสดงความคิดนั้น

แต่ตอนนี้รหัสนี้ไม่เพียง แต่รัดกุม: มันสง่างามอย่างแท้จริง ชวนให้นึกถึงภาษาอื่น ๆ เช่น Python

ข้อความกลับบ้าน

มีคุณสมบัติ Groovy ที่ยอดเยี่ยมมากมาย อย่างไรก็ตามเราแทบจะไม่เห็นรายการ 'ส่งคืนโดยนัย' ฉันเป็นแฟน: มันหล่อลื่นล้อสำหรับคุณสมบัติอื่น ๆ

ฉันรู้ว่ามีให้บริการในหลายภาษา: ฉันเพิ่งไม่ได้ใช้ใน Groovy ฉันสงสัยในอีกไม่กี่สัปดาห์ฉันจะไม่สามารถอยู่ได้โดยปราศจากมัน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.