Który kod lepszy?

0

Który kod lepszy?

def main() {
    writer = getWriterInstance()
    writeHeader(writer)
    writeBody(writer)
    writeFooter(writer)
    writer.close()
}

def writeHeader(writer) {
    str = "xxxxxxxxxxx"
    writer.write(str)
}
def writeBody(writer) {
    str = "yyyyyyyyyyyy"
    writer.write(str)
}
def writeFooter(writer) {
    str = "zzzzzzzzzzzzzzz"
    writer.write(str)
}

czy

def main() {
    writer = getWriterInstance()
    writer.write(getHeader())
    writer.write(getBody())    
    writer.write(getFooter())
    writer.close()
}

def getHeader() {
    return "xxxxxxxxxxx"
}
def getBody() {
    return "yyyyyyyyyy"
}
def getFooter() {
    return "zzzzzzzzzzzzzz"
}
4

2

brak zależności do jakiegoś writera, który i tak nic nie robi

1

To mi nie wygląda jak Python ;-)

0

kolejne pytanie:

Lepiej tak:

def main() {
    writer = getWriterInstance()
    writer.write(getHeader())
    writer.write(getBody())    
    writer.write(getFooter())
    writer.close()
}

def getHeader() {
    return """
      | xxxxxxxxxxx
      | xxxxxxxxxxx
      | xxxxxxxxxxx
      | xxxxxxxxxxx
    """
}
def getBody() {
    return """
      | xxxxxxxxxxx
      | xxxxxxxxxxx
      | xxxxxxxxxxx
      | xxxxxxxxxxx
    """
}
def getFooter() {
    return """
      | xxxxxxxxxxx
      | xxxxxxxxxxx
      | xxxxxxxxxxx
      | xxxxxxxxxxx
    """
}

czy tak:

def main() {
    writer = getWriterInstance()
    stringsss = new Stringsss()
    writer.write(stringsss.header)
    writer.write(stringsss.body)    
    writer.write(stringsss.footer)
    stringsss = null
    gc()
    writer.close()
}
class Stringsss {
   header = """
      | xxxxxxxxxxx
      | xxxxxxxxxxx
      | xxxxxxxxxxx
      | xxxxxxxxxxx
    """

    body= """
      | xxxxxxxxxxx
      | xxxxxxxxxxx
      | xxxxxxxxxxx
      | xxxxxxxxxxx
    """

    footer= """
      | xxxxxxxxxxx
      | xxxxxxxxxxx
      | xxxxxxxxxxx
      | xxxxxxxxxxx
    """
}
0

Pierwszy jest kiepski, bo miesza pobieranie danych z konkretnym sposobem ich użycia.

Drugi jest lepszy, bo funkcje po prostu zwracają dane, które możesz sobie użyć jakkolwiek.

 writer.write(getHeader())
 writer.write(getBody())    
 writer.write(getFooter())

Nie musisz powtarzać cały czas write.write:

 for getData in [getHeader, getBody, getFooter]:  
    writer.write(getData())

A poza tym nie jest to Python (to, co w pierwszym poście), bo w Pythonie nie ma klamerek.

1

słabe te przyklady

0

Pisanie getterów/setterów w językach dynamicznych, takich jak Python, zazwyczaj mija się z celem. Co chcesz osiągnąć, korzystając z nich? Bo enkapsulacja, na przykład, odpada — w Pythonie nic nie jest prywatne.

0
Althorion napisał(a):

Pisanie getterów/setterów w językach dynamicznych, takich jak Python, zazwyczaj mija się z celem. Co chcesz osiągnąć, korzystając z nich? Bo enkapsulacja, na przykład, odpada — w Pythonie nic nie jest prywatne.

single reponsibility?

0

I w jaki sposób ta zasada jest lepiej realizowana przez cośtam.getBody() niż cośtam.body? Czy cośtam.setBody(123) niż cośtam.body = 123?

1
Althorion napisał(a):

I w jaki sposób ta zasada jest lepiej realizowana przez cośtam.getBody() niż cośtam.body? Czy cośtam.setBody(123) niż cośtam.body = 123?

ale nie o to mi chodzi :(

1 użytkowników online, w tym zalogowanych: 0, gości: 1