Latest / Coding Buddies | Tech & Dev-Mindset / Clean Code #3 - (Funktion)iert das überhaupt?
Transcript
- 0:00Die Funktion heißt Würze mein Essen und du Schüttest da Salz
- 0:03rein und Kräuter und Paprikapulver und noch Knoblauch
- 0:07und alles so. Warte mal Paprikapulver
- 0:10rosenscharf oder Edelsüß. Holding Bodys dein Podcast wohnt
- 0:14im Softwareentwicklung und aktueller Technews?
- 0:17Herzlich Willkommen. Ja, herzlich Willkommen und
- 0:31Halli Hallo zur neuen Folge des Coding Buddies Podcast und
- 0:34wieder mal mit dabei wie immer kurze Einführung meine
- 0:37Wenigkeit, der Tino und natürlich auch der fantastische
- 0:40Fabi Moin Fabi, herzlich Willkommen zur neuen Folge.
- 0:43Moin Tino, Wie geht es? Wie steht es?
- 0:47Ich spüre die Energie, spür es richtig, geht es dir gut?
- 0:50Ja, also ich weiß nicht irgendwie, ich habe jetzt gerade
- 0:52beim Podcast wieder voll Energie, aber eigentlich bin ich
- 0:54ein bisschen müde, muss ich ganz ehrlich sagen heute, ich weiß
- 0:55gar nicht warum, aber. Ausgefahren, das heißt, wenn es
- 0:59heißt, wir nehmen jetzt n Podcast auf, dann bist du so
- 1:01gehyped und hast so Bock drauf, dass deine ganze Lebensenergie
- 1:04zurückkommt oder? Auf jeden Fall hab ich das so
- 1:06verstehen auf jeden Fall. Ja, ich lebe.
- 1:08Das ist in diesen Podcast. Ich lege für diesen.
- 1:11Podcast weil die Bestimmung diesen Podcast aufzeichnen, weil
- 1:15ich lebe, weil wir diesen Podcast machen.
- 1:18Ach so, also so OK, den finde ich gut, das ist genau das
- 1:22Mindset, was wir hier brauchen, um bestmöglichen Content zu
- 1:25liefern. Deswegen sage ich mal, lass uns
- 1:30nicht so viel ins Off topic rutschen, dafür haben wir ja
- 1:33eigene Formate hier im Podcast. Deswegen würde ich sagen, habe
- 1:37ich noch ein Thema mit und das würde ich gerne mit dir heute
- 1:39mal besprechen. Und zwar ist es mal wieder
- 1:42soweit für eine neue Folge zum cleancode Thema.
- 1:48Ja, ich sehe deine Begeisterung, du hast Bock, du hast Bock.
- 1:51Grüße gehen raus. Genau.
- 1:57Der Meister. Genau.
- 2:00Und zwar hatten wir ja schon, ich glaube, 2 Folgen hatten wir
- 2:02doch jetzt schon gemacht, oder? Zum Cleancode ja genau, also ist
- 2:06heute die 3. Folge.
- 2:08In der letzten hatten wir glaube ich über Benahmung gesprochen,
- 2:11von Funktion und Variablen so ganz allgemein.
- 2:14Was es da so zu beachten gibt und was als Best Practice gilt,
- 2:18was nicht so gut ist, was so n bisschen unsere Meinung dazu
- 2:20sind und genau auf dieser Ebene würde ich gerne weitermachen mit
- 2:23dir. Nur dass wir ein anderes Thema.
- 2:27Natürlich haben wir nicht noch mal das gleiche Leben und zwar
- 2:30würde ich sagen, lass uns doch was hier los, lass uns doch
- 2:34heute mal über Funktion allgemein reden, ja Funktion
- 2:38betonen, je nach Sprache wie man sie nennt, aber wir definieren
- 2:41noch mal kurz, was wir jetzt damit meinen, würde ich sagen
- 2:43und dann können wir ja mal so ein bisschen darüber reden, was
- 2:46unsere Meinung dazu ist, was ein ganz guter Stil ist oder was wir
- 2:49versuchen zu vermeiden und gehen natürlich auch so ein bisschen
- 2:53auf diese allgemeine cleancode Bewegung wieder ein, was?
- 2:57Danach quasi Best Practice ist oder wollen wir das so machen?
- 3:00Finde ich gut. Okay dann würde ich sagen, gib
- 3:05uns doch mal ein Frame. Also, liebe Zuhörer, liebe
- 3:08Zuhörer, dass wir einfach mal alle jetzt hier zusammen, wie
- 3:11wir da sind, quasi wissen, was jetzt mit Funktion gemeint ist.
- 3:15Fabi, magst du da mal starten? Ja, sehr gerne.
- 3:19Also Funktion sind ja im Endeffekt, ich versuche das ein
- 3:22bisschen kurz zu halten, sind quasi abgekoppelt.
- 3:26Code Stücke, die man immer wieder sozusagen ausführen kann
- 3:31und meistens oder im Normalfall sollten diese Funktionen halt
- 3:35auch quasi dafür da sein, dass eine bestimmte Aufgabe erfüllt
- 3:39wird, damit man halt eben seinen Code zum Beispiel auch
- 3:42wiederverwendbar machen kann oder modular halten kann.
- 3:46Solche Sachen und mal ein kleines Beispiel zu geben, wenn
- 3:49man sich das jetzt vielleicht überhaupt nicht vorstellen
- 3:51könnte, kann man sich das vielleicht so ein bisschen
- 3:54vorstellen, angenommen, du möchtest jetzt zum Beispiel.
- 3:59Du möchtest was kochen und jetzt hast du irgendwie so dein dein
- 4:02Rezept in der Küche und gehst in das Rezept durch und irgendwann
- 4:06an einer Stelle im Rezept kommt zum Beispiel okay du musst jetzt
- 4:10vielleicht irgendwie für eine Suppe was pürieren, so, das
- 4:13heißt du nimmst dir deinen Mixer und du packst in den Mixer,
- 4:16packst du halt entsprechende Utensilien rein, die dann gemixt
- 4:19werden sollen, also zum Beispiel, ich sag jetzt mal, du
- 4:21willst jetzt irgendwie eine Zwiebelsoße machen, dann machst
- 4:23du da Zwiebeln rein, dann kommen da noch was weiß ich ein paar
- 4:26Nüsse und paar Pilze rein, ich weiß es nicht.
- 4:28Verrückt? OK, also merkt euch das Rezept,
- 4:31also das Rezept findet ihr auch auf chefkoch.de.
- 4:33Einfach mal Google. Nee, auf jeden Fall.
- 4:38So, und dann musst du halt, dann ist das fertig, dann erhitzt du
- 4:42die noch, packst noch n paar Kräuter rein, was auch immer so,
- 4:44du hast so n Ablaufplan. Mhm.
- 4:47Und wenn du jetzt mal als Analogie keine Funktion benutzen
- 4:50würdest, dann würde es ja bedeuten, dass du sozusagen,
- 4:53wenn du eine, wenn du diese, dieses dieses Gericht kochen
- 4:56möchtest, dann brauchst du einen Mixer, den du nur, also die in
- 5:00diesem Mixer kannst du nur mit Pilzen, Zwiebeln und Nüssen, was
- 5:04ich auch immer ich gerade gesagt habe, befüllen.
- 5:07Und wenn du ein anderes Rezept kochen möchtest, also zum
- 5:09Beispiel möchtest du etwas machen, wo du auch einen Mixer
- 5:12brauchst, zum Beispiel Smoothie, dann brauchst du noch einen
- 5:14zweiten Mixer, weil für der eine Mixer, den du hast, der ist ja
- 5:18wirklich nur dafür da, um Zwiebeln, Pilze und Nüsse.
- 5:22Zu sag ich mal zermixen wenn du das ganze jetzt aber auslagerst
- 5:25und sagst okay das mixen an sich ist eine Funktion und ich habe
- 5:29Parameter, die ich sozusagen in diese Funktion mixen reingeben
- 5:33kann. Also die Zutaten in dem Fall.
- 5:35Genau die Zutaten. Dann bin ich ja sehr, sehr
- 5:38variabel, das heißt, ich kann quasi sagen okay, ich habe ein
- 5:41Rezept und innerhalb dieses rezeptes rufe ich jetzt
- 5:44sozusagen die Funktion mixen auf mit bestimmten Paraden, also mit
- 5:48den entsprechenden Variablen und was ich zurück kriege als Return
- 5:51wert beispielsweise was mir diese Funktion zurückgibt ist
- 5:53dann das Endresultat des Mixes. Also ich nenne es jetzt mal die
- 5:57Soße, den Smoothie, was auch immer dieses Erzeugnis was da
- 5:59entsteht ne so und so kann man sich das bisschen vielleicht
- 6:02vorstellen als. Analogie wie das im Code
- 6:07funktioniert ne, also du hast quasi eine Berechnung die du
- 6:09irgendwie anstellen möchtest und diese Berechnung ist in
- 6:12bestimmten, also hat bestimmte Parameter, die reingegeben
- 6:16werden müssen und damit wird dann diese Berechnung
- 6:18stattgefunden, also durchgeführt mit den Begrenzungen, dass du
- 6:23zum Beispiel natürlich auch bei diesem Mixer nur eine bestimmte
- 6:26Möglichkeit von Input hast. Also du kannst nur, ich sag mal,
- 6:30bestimmte Lebensmittel reingeben.
- 6:32Du kannst ja jetzt nicht schrauben reinwerfen oder was
- 6:35auch immer, also ist es bei Funktionen ja zum Beispiel auch
- 6:37so, dass du dann als Parameter, wenn du zum Beispiel integer
- 6:40rein gibst, kannst du jetzt vielleicht nicht unbedingt
- 6:42Strings oder so verwenden, weil das ist ja vorgegeben.
- 6:46Damit würde ich sagen, das wäre jetzt so meine Analogie zum
- 6:49Thema Funktion. Ja, OK, es sei doch n bisschen
- 6:52umfangreicher geworden, aber ich denke, es ist war ganz gut
- 6:54verständlich. Was man jetzt ergänzend sagen
- 6:57kann, das ist ja jetzt nicht nur mixen.
- 6:59Du könntest ja jetzt so n Set an Funktionen dir schreiben.
- 7:02Mixen. Braten.
- 7:06Schneiden, was auch immer und damit dann quasi verschiedene
- 7:09Programme implementieren. Was du jetzt als kochrezept
- 7:12bezeichnet hast. Und dann kannst du halt
- 7:14verschiedene Gerichte kochen, im Endeffekt ne find ich gut.
- 7:17Genau so kann man das dann aufbauen, ja.
- 7:19Genau. Und dann kannst du es halt immer
- 7:20wieder verwenden, weil du ja in mehreren Rezepten zum Beispiel
- 7:24die Funktion braten brauchst oder mixen genau richtig.
- 7:28Ja genau, ja, auf jeden Fall vielen Dank nochmal für die
- 7:31Einführung, weil wir haben ja auch einige Zuhörer, die noch
- 7:34uns zuhören, die ganz am Anfang der Softwareentwicklung stehen
- 7:37und ich denke, dass so eine Analogie da eigentlich immer
- 7:39ganz geil kommt, um das so mal zu verstehen, wenn man noch an
- 7:42den Anfängen ist. Was wir jetzt damit eigentlich
- 7:44meinen. Und alle erfahrenen Zuhörer
- 7:48danke fürs Dranbleiben. Jetzt kommen wir zum teat Thema,
- 7:52aber auch jetzt haben wir einmal abgesteckt, worum es geht.
- 7:56Genau. Wenn es jetzt um Funktionen
- 7:59geht, noch mal n kleiner Reminder oder ne Zusammenfassung
- 8:03der letzten Folge haben wir gesagt, dass die Namensgebung
- 8:05sehr essentiell ist bei Funktion um einfach zu wissen, wie du ja
- 8:09gerade meintest. Diese Funktion nimmt ja im
- 8:11besten Fall eine Aufgabe an. Dass quasi der Name der Funktion
- 8:17sehr gut beschreibt, was innerhalb dieser Funktion
- 8:19passiert, damit ich von außen, wenn wir jetzt noch mal die
- 8:22Analogie nehmen, das Kochrezept genau weiß.
- 8:26Wenn ich diese Funktion verwende, was passiert genau, du
- 8:29willst ja nicht zum Beispiel ja, also zum Beispiel jetzt, wenn
- 8:32man noch mal das Kochrezept nehmen, wenn ich die Funktion
- 8:34braten aufrufe und sage okay was will, was ist die Eingabe Anzahl
- 8:40der der Stücken Fleisch oder was auch immer oder Gemüse.
- 8:45So, dann will ich ja nicht, dass die Funktion aufrufe erwartet,
- 8:48dass irgendwas angebraten wird und dann aber da drin gekocht
- 8:51wird oder so. Also jetzt einfach nur ins
- 8:52Wasser geschmissen wird, gemixt und genau oder gemixt, worst
- 8:56Case gemixt. Und das ist halt genau da sieht
- 9:00man ja anhand so so eines einfachen Beispiels schon, dass
- 9:04irreführende Namen zu ziemlich großen Problemen führen können.
- 9:09Und deswegen würde ich diesen Punkt aus Funktion, weil wir es
- 9:11in der letzten Cleancode Folge ja besprochen haben, rausnehmen.
- 9:14Nur noch mal so kurze Erinnerung, die Namensgebung ist
- 9:16halt sehr essentiell. Was ist für dich dann ein
- 9:21weiterer, sehr wichtiger Punkt? Also was würdest du sehr hoch
- 9:24priorisieren, was dir bei Funktionen wichtig ist?
- 9:28Was mir wichtig ist, ist, was ich schon mal so n bisschen,
- 9:33also was ich auch schon mal n bisschen angeschrieben hab am
- 9:35Anfang. Also du willst ja mit einer
- 9:36Funktion eine bestimmte Funktionalität im Normalfall
- 9:39abkapseln, ne, also du möchtest sagen wie wir Grad gesagt haben
- 9:43mixen oder braten du möchtest jetzt aber nicht, also was zum
- 9:46Beispiel schlecht wäre wenn man jetzt eine Funktion schreiben
- 9:48würde die da heißen würde zum Beispiel kochen und braten.
- 9:55Oder ZB. Rühren oder mixen oder was auch
- 10:01immer. Weißt du, dass du sozusagen
- 10:02genau in einer Funktion eigentlich sagst, mache entweder
- 10:06dies oder das beziehungsweise mache dies und das mal als
- 10:09Beispiel, sondern dass man wirklich darauf achtet, dass man
- 10:13sagt Okay, was haben wir denn für kleinste Einheiten, logische
- 10:16Einheiten, die man zum Beispiel verwenden oder beziehungsweise
- 10:21durchführen kann und beziehungsweise rechnen kann und
- 10:24an der Stelle ist es ja zumindest so, dass man jetzt
- 10:27sagen kann okay, du hast eine Funktion, die dir sagt Okay
- 10:31berate das. Koche das, Mixe das, rühre das
- 10:35und diese ganze Logik, die Drumherum stattfindet.
- 10:41Das ist ja quasi das, was sozusagen dann von außen
- 10:44passiert. Also bei den Funktionsaufrufen
- 10:47ne, also die Entscheidung entweder oder beispielsweise
- 10:50genau, also das wäre für mich jetzt auf jeden Fall so ein
- 10:52Punkt. Der finde ich auch sehr wichtig.
- 10:55Ja, also dass man quasi sagt, es gibt eine ganz klare
- 10:58Verantwortlichkeit, die von dieser Funktion übernommen wird,
- 11:03so könnte man es ja denn eigentlich zusammenfassen, oder?
- 11:05Also genau genau das ist wirklich eine Aufgabe, gibt, die
- 11:08total klar ist. Genau das werde ich auf jeden
- 11:10Fall so Punkt 1, wenn wir das noch mal so ein bisschen in so
- 11:13ein paar Punkte zusammenfassen, finde ich sehr gut.
- 11:18Beziehungsweise lassen wir sagen Punkt 2.
- 11:19Wir nehmen nochmal den ersten mit den Namen auf.
- 11:21Finde ich gut. Da kommt nämlich auch gleich
- 11:25noch ein nächster Punkt, der mir auch sehr wichtig ist, den ich
- 11:29aber, wo ich selbst oft in Fallen laufe, weil es halt
- 11:32bequem ist, sich nicht. Dran zu halten.
- 11:34OK, jetzt kommt bin gespannt ist die Anzahl der Eingabeparameter
- 11:40bei Funktionen und es ist leicht zu sagen Na ja dann geb ich das
- 11:44noch rein und das aber es muss denn jetzt die Funktion an jetzt
- 11:47muss ich ja noch wie du meintest zum Beispiel.
- 11:49Entscheidungen treffen innerhalb der Funktion, ja, wann etwas
- 11:53passiert. Na ja gut, dann gebe ich jetzt
- 11:55von außen rein, ein Parameter, der mir hilft diese Entscheidung
- 11:59zu treffen und dann ist halt einfach schon wieder.
- 12:02Vorsicht geboten, weil das zeigt schon wieder, dass diese
- 12:05Funktion mehr als nur eine Verantwortlichkeit hat und man
- 12:08eigentlich dann schon wieder aus seinem cleancode Rahmen, den man
- 12:11sich gesteckt hat, Rausspringt und.
- 12:14Die Komplexität, eine Funktion zu verstehen oder auch sauber zu
- 12:20entwickeln, steigt enorm an. Mit der Anzahl der der
- 12:23Eingabeparameter. Das klingt jetzt irgendwie so n
- 12:25bisschen ach na ja, komm, ob ich jetzt einen hab oder 2 oder 3.
- 12:30Das so schlimm ist das jetzt nicht.
- 12:31Ja, das wirkt erstmal nicht schlimm, aber rückblickend und
- 12:34über die ganzen Iterationen, wir haben ja auch schon viel über
- 12:36Refactoring gesprochen, hilft es einfach nicht, viele
- 12:40Eingabeparameter zu verwenden beim Codeverständnis später.
- 12:43Sondern. OK, hier gehen 3 Parameter rein.
- 12:45OK wo war OK die erste der erste verstehe ich noch mit dem
- 12:48passiert was was macht der zweite OK der entscheidet
- 12:51irgendwie was mit dem ersten passiert, der Dritte im im Worst
- 12:56Case ist der Dritte sogar noch ein Fleck einfach sowas wieso?
- 12:59Optionaler Schritt ist an oder aus auch ein ganz klassisches
- 13:02Beispiel Fleckparameter und muss ich sagen, neige ich auch dazu,
- 13:06die ab und zu mal wenn es schnell gehen muss einzubauen
- 13:08und denk mir immer wieder nicht cool nicht.
- 13:11Cool. Aber es passiert, also weißt du
- 13:14was ich meine mit Fleckparametern definitiv.
- 13:16Also das ist ja quasi also das, das geht ja sogar auch n
- 13:19bisschen das Hand in Hand so n bisschen mit der mit.
- 13:24Sage ich jetzt mal Verantwortung, die eine Funktion
- 13:27übernimmt, dass man sagt, OK, es soll wirklich nur eine Aufgabe
- 13:29erfüllen und ein Beispiel wäre ja im Sinne von Hand in Hand
- 13:33gehen, wäre ja, dass man zum Beispiel sagt, Braten oder
- 13:35mixen, und du gibst sozusagen Fleck von außen rein und sagst
- 13:39quasi Braten gleich True, und in dem Fall sagst du dann für den
- 13:43Fall, dass Braten gleich Choice führe ich braten aus, sozusagen
- 13:45also den Code für Braten, weißt du, und das ist ja quasi so ein
- 13:49bisschen. Der Punkt, der da Hand in Hand
- 13:53geht, meiner Meinung nach. Aber es gibt natürlich auch
- 13:55andere Möglichkeiten, wie zum Beispiel so sogenannte Magic
- 13:58Numbers, sag ich jetzt mal. In dem Fall ist es n Magic
- 14:00Number Set, weil du jetzt vielleicht sagen, du gibst
- 14:03irgendwie von außen ne zahlen inam oder was auch immer rein,
- 14:06was dir anhand von diesem Inam dann am Ende bestimmt, welcher
- 14:09Code ausgeführt wird. Genau, ich weiß was du meinst
- 14:13und das Ding ist man. Es ist ja immer einfach gesagt,
- 14:17dass man sich denkt, ja Pass auf, gib bitte nicht zu viele
- 14:20Parameter rein und gib auch nicht solche Flex rein, so eine
- 14:23Parameterflex oder wie man das auch mal nennen mag Feature Flex
- 14:27wie auch immer, gibt die Mal bitte jetzt nicht von von außen
- 14:30rein und das ist ganz klar, das macht ja auch Sinn, man kann
- 14:33darüber reden, man denkt sich es ist logisch und dann
- 14:36implementierst du eine Funktion und Voila auf einmal hat sich
- 14:39sowas eingeschlichen, obwohl man ja eigentlich weiß, dass man
- 14:42sowas nicht haben möchte und dann auf einmal ist es doch so
- 14:44und das ist manchmal so ein bisschen, dass man sich denkt,
- 14:46so wo kommst du denn her? Du kleiner Scheu, so
- 14:49rückblickend, so richtig reingesneckt und du denkst dir
- 14:53so hä so Wochen später, warum? Ich weiß doch selbst ganz genau,
- 14:57dass das nicht gut ist. Warum habe ich das gemacht und
- 14:59ich finde, da muss man auch. So offen und ehrlich sein auch,
- 15:03liebe Zuhörer, lieber Zuhörer dir gegenüber, dass sowas
- 15:07passiert. Also ich sag das ja nicht ohne
- 15:08Grund, also diese Fleckparameter zum Beispiel hab ich echt ab und
- 15:12zu noch drin, wo ich mir denke, warum mach ich das ja gut, weil
- 15:14es an der Stelle einfach. Bequem war eine Entscheidung,
- 15:17darauf basierend zu treffen. Und.
- 15:23Es natürlich Aufwand und Kraft kostet, das Umzudesignen, was ja
- 15:28auch wieder ne Form von Refactoring ist, was da einfach,
- 15:30wenn man ehrlich ist und wirklich clean entwickeln will
- 15:33noch ausstehend ist, ja. Out genau, es ist einfach out,
- 15:39verkürzen wir das ganze. Und ja, und deswegen, was ist
- 15:48denn für dich so eine Anzahl an Parametern wo du sagst, das ist
- 15:51das ist für dich persönlich noch cool?
- 15:56Also ich würde sagen irgendwas bis 2 ist auf jeden Fall.
- 16:00Geht absolut klar. 3 ist okay gehen irgendwie noch, ist aber
- 16:06finde ich schon so eher grenzvoll.
- 16:10Also dass man wirklich sagen muss, okay brauche ich wirklich
- 16:12diese 3. Kann ich das noch irgendwie
- 16:14anders machen und wenn nein, dann ist es okay.
- 16:18Aber wenn man jetzt zum Beispiel, also ich find 4
- 16:20Parameter, da wird es dann schon langsam so n bisschen kritisch
- 16:25bei einer Funktion, weil. Genau aus den Gründen oder weil
- 16:29du es einfach so. Also von der Optik her nicht
- 16:32Marx vom vom Lesen Diskurs. Oder hast du wirklich das Gefühl
- 16:35bei 4 Parametern, dass es, dass die Komplexität zu groß wird?
- 16:40Ja genau, also ist so meine Erfahrung.
- 16:45Dass es halt so ist, weil du allein schon.
- 16:46Also es geht ja auch nicht immer nur darum, wie eine Funktion
- 16:49geschrieben aussieht, sondern wenn du so ne Funktion aufrufst,
- 16:51dann ist ja auch immer die Frage OK, was für Parameter brauch
- 16:53ich, du brauchst ja im Endeffekt relativ viele Informationen, die
- 16:57du in eine Funktion hineingeben musst, um dann zu sagen okay was
- 17:01passiert denn damit, also du musst ja auch diese ganzen
- 17:03Informationen zusammen sammeln, sage ich jetzt mal.
- 17:06Und im Normalfall, wenn du 4 Parameter brauchst, dann
- 17:09brauchst du von außen noch 4 Werte, die du irgendwoher
- 17:11kriegst. Und die Frage ist, wo kriegst du
- 17:12die her? Das ist auch wieder am Ende
- 17:14alles Code jetzt mal ein bisschen blöd gesagt.
- 17:17Und deswegen, je mehr Parameter also irgendwann so ab über 3
- 17:21sollte man vielleicht schon mal noch mal ein bisschen gucken.
- 17:23Also es ist jetzt nicht so, dass ich sage, bei 4 Parametern musst
- 17:26du was anders machen, es gibt durchaus auch libraries oder so,
- 17:29wo du halt mehrere Parameter hast und auch mehr als 4.
- 17:34Kennt man bestimmt, wenn man ein bisschen auch Libraries benutzt
- 17:38hat und damit gecode hat. Aber nichtsdestotrotz ist es
- 17:43vielleicht schon, würde ich so als andere.
- 17:45Punkt sagen bei mehr als 3 muss man schon mal noch mal
- 17:50vielleicht noch mal gucken, ob man da nicht leichtfertig
- 17:52handelt. Ja, wie sieht es bei dir?
- 17:57Ja, geh ich mit auf jeden Fall. Also ich sag mal so nach best
- 18:02practice oder so sollte man halt immer gucken, dass die Funktion
- 18:05nur ein Eingabeparameter haben, dass man halt wirklich sagt, OK,
- 18:09diese Funktion hat ein Eingabeparameter und dann
- 18:12passiert also anhand des Namens erkenne ich schon was damit
- 18:15passiert sozusagen alles alles klar, dass es nach Lehrbuch so
- 18:20sein sollte, aber ich bin ganz bei dir, es geht halt schnell,
- 18:23dass du mehr brauchst und dann fragst du dich wieder.
- 18:26Ist das jetzt okay 34? Ab 4 finde ich dann halt auch
- 18:30schon tricky. Was aber noch spannend ist,
- 18:33jetzt können ja Leute sagen, na gut, dann mache ich in manchen
- 18:37Sprachen geht das und manchen nicht, aber gehen wir mal davon
- 18:40aus, wir sind jetzt in dem Fall, ich habe jetzt optionale
- 18:43Parameter, oder? Parameterlisten, was ja auch,
- 18:49sage ich mal, ein ähnliches Verhältnis, dass ich quasi, ich
- 18:52muss die Parameter jetzt nicht angeben, aber ich kann ansonsten
- 18:56gibt es oder oder, es gibt so die Default Werte dann wenn ich
- 18:59sie nicht angebe. Löst das das Problem, dass man
- 19:03dann sagen kann, OK, na gut, dann kann ich ja jetzt 8 haben,
- 19:05weil 2 davon sind nur Pflicht, die anderen sind default belegt
- 19:09und wenn ich Bock hab was zu ändern da dran, dann kann ich
- 19:11die belegen wie wie stehst du denn da zu dem Thema?
- 19:15Na du kannst ja also optionale Parameter ist halt schwierig,
- 19:19also aus Erfahrung kann ich sagen, manchmal ist es schon
- 19:22nicht schlecht, wenn man solche Parameter hat, also angenommen
- 19:25man hat zum Beispiel eine Funktion mit einem Parameter und
- 19:29hat vielleicht noch einen optionalen zweiten, da geht es
- 19:31halt wieder dahin so okay wenn du irgendwann keine Ahnung 10
- 19:34Parameter hast und 2 davon sind mandatory, also verpflichtend
- 19:38die einzusetzen. 8 davon sind halt freiwillig.
- 19:42Optional freiwillig klingt gut, freiwillig.
- 19:45Dann ist es halt auch wieder die Frage okay warum hast du 10
- 19:48Parameter für deine Funktion, auch wenn sie nur optional sind,
- 19:50aber du kannst sie ja benutzen, das ist immer so ein bisschen
- 19:53dann die Frage und dann ist halt auch wieder die Frage okay wenn
- 19:57diese Parameter wirklich vielleicht auch zusammengehören
- 19:59und eine Einheit bilden, was? Gibt es nicht ein Objekt, was
- 20:04quasi diese ganzen Parameter als Attribute enthält?
- 20:08Und dann übergibst du halt das Objekt ne andere Punkt.
- 20:11Andererseits würde ich mich halt auch hinstellen und sagen, ja
- 20:14gut, du kannst jetzt aber nicht zum Beispiel weiß nicht 5
- 20:16Parameter nehmen, die miteinander eigentlich so gut
- 20:18wie gar nichts zu tun haben, also sowas wie keine Ahnung so
- 20:21mehrere Flex wo du sagst das ja nein das ja nein das ja nein so
- 20:25nach dem Motto und dann noch keine Ahnung so wirklich
- 20:29Parameter die am Ende wirklich also verpflichtend sind, die du
- 20:33auf jeden Fall einsetzen musst. Die dann so ich sag mal wirklich
- 20:38Daten enthalten, die also so payload sozusagen, wenn.
- 20:43So n so n Mischmasch aus Informationen hast, dann bringt
- 20:45es aber auch zum Beispiel nicht zu sagen, ja gut, dann
- 20:48verwurschtel das doch alles in Objekte und Übergib ein Objekt,
- 20:51weil dann hast du ja einen Parameter, das ist ja dann wie
- 20:53das Safe so, weil dann hast du ja noch einen weißt du also es
- 20:56muss natürlich immer einheitlich logisch zusammenpassen, wenn man
- 20:59sagt, OK, man erzeugt quasi ein Objekt mit Attributen und dann
- 21:04kann es aber durchaus helfen, auch für die Lesbarkeit einer
- 21:08Funktion, dass man sagt okay, ich habe zum Beispiel 3
- 21:11Parameter, ich möchte jetzt aber nur noch 2 haben, weil 2
- 21:13Parameter ist eigentlich mehr oder weniger logisch eine
- 21:16Einheit. Kannst du halt als einzelnes
- 21:19Objekt übergeben und damit hast du dann quasi eventuell wieder 2
- 21:23Parameter die du übergibst. Ein Objekt und eine Variable zum
- 21:26Beispiel ein ein, ein Datenwert was ich in String was auch
- 21:28immer. Und damit kannst du dann
- 21:30weiterarbeiten. Es ist am Ende auf jeden Fall
- 21:32lesbarer, als wenn man jetzt zum Beispiel alles total
- 21:35aufschlüsselt und sagt, also genauso umgekehrt, wenn du n
- 21:38Objekt hast, kannst du natürlich auch sagen, gut, ich übergeb
- 21:41jetzt beispielsweise von einem Objekt immer nur die einzelnen
- 21:44Parameter. Und Übergeb anstatt ein Objekt
- 21:47alle Attribute des Objektes. Aber dann hast du natürlich
- 21:50wieder viele Parameter, was mich mal zu viel interessieren würde,
- 21:52da könnte ich auch mal eine. Frage an dich mal zurück werfen
- 21:57und zwar wie stehst du denn dazu wenn man sagt okay man hat.
- 22:02Zum Beispiel? Du hast ein Objekt und 3
- 22:06Attribute. Übergibst du dann die Attribute
- 22:08einzeln oder übergibst du das gesamte Objekt?
- 22:13Merk dir die Frage mal ganz kurz.
- 22:14Ich würd gern noch mal zusammenfassen, was davor war,
- 22:17was du, weil du hast jetzt sehr sehr viel geilen Input
- 22:19geliefert, ich würd das noch mal ganz kurz noch mal
- 22:21zusammenfassen. OK, also.
- 22:23Sind wir eigentlich jetzt, wenn ich das richtig verstanden habe,
- 22:25beide der Meinung, dass optionale Parameter OK sind?
- 22:28Klar, die haben ihre Daseinsberechtigung, genauso
- 22:30argumentenlisten. Zählen aber in die Gesamtheit
- 22:35der Parameter, die man übergibt mit rein.
- 22:37Das heißt wenn ich jetzt 2 mandatory wie du gesagt hast und
- 22:41einen optionalen habe, dann ist das noch okay, aber das geht
- 22:44schon in Richtung Grenze und kann nicht sagen ich habe 2 die
- 22:47Pflicht sind, dann habe ich also 2 eingabeparameter und kann so
- 22:50viel verkehrten da hinten dran optional wie ich will, weil das
- 22:53eben genau die Komplexität der Funktion trotzdem enorm
- 22:56steigert, weil man ja sowas machen muss wie ja ist denn
- 23:00dieser Parameter gesetzt, ist der definiert oder ist das noch
- 23:04der Default wert oder weißt du also dadurch?
- 23:07Steigert ja die Komplexität oder wird die Komplexität enorm
- 23:10gesteigert innerhalb der Funktion?
- 23:12Also da bin ich auf jeden Fall ganz bei dir, das mit den
- 23:15Objekten zusammenfassend semantisch finde ich ist sehr
- 23:18sehr gut, der Punkt, wenn das nämlich wenn du eine
- 23:21Datenstruktur bauen kannst, die semantische super
- 23:23zusammenpacken, dann kannst du die übergeben auf jeden Fall
- 23:26das. Weil es einfach dadurch wieder
- 23:28lesbarer wird. Und dann komm ich ja jetzt im
- 23:31Prinzip zu deiner Frage, ob ich die ob das Objekt übergeben
- 23:35würde oder die einzelnen Werte aus dem Objekt.
- 23:38Richtig also ich hab jetzt n Objekt mit 3 Attributen und kann
- 23:41diese Attribute einzeln haben, ob ich jetzt ZB.
- 23:48Ja, weiß ich nicht. Wir haben eine Person als Objekt
- 23:50und das hatten die Person hat Name, Alter und so weiter und du
- 23:54sagst übergibst du jetzt die Person das Objekt in eine
- 23:57Funktion, zum Beispiel ist volljährig mal auf Deutsch,
- 24:02jetzt kurz. Ob ich die Person rein gebe oder
- 24:06zum Beispiel nur das Alter, also an der Stelle wäre halt auch
- 24:09noch interessant, dass du zum Beispiel ein Objekt hast, was
- 24:12vielleicht 10 Attribute hat. Du brauchst aber nur 2 oder 3
- 24:15oder was auch immer, so weißt du also du brauchst nur eine
- 24:17deutliche Teilmenge davon, genau also wenn es, wenn es wirklich
- 24:22nur einige Werte sind davon, dann würde ich immer die Werte
- 24:24übergeben, weil es einfach viel klarer ist, was die Funktion
- 24:27macht. Also wenn ich nur Funktion habe
- 24:28wo eine Person reingibt geht oder also um bei dem bei dem
- 24:31Beispiel zu bleiben, dann kann er ja immer noch alles Mögliche
- 24:34drin passieren. Wenn ich aber das Alter rein
- 24:36gebe weiß ich ja schon, dass die Funktion irgendwie mit dem Alter
- 24:39arbeitet. Ja.
- 24:40Andererseits, also ja, verstehe ich auch, gehe ich auch soweit
- 24:44mit was ich halt interessant finde ist, wenn du jetzt dieses
- 24:46Beispiel ist volljährig nimmst, ist es ja schon an sich schön zu
- 24:49lesen, wenn Du zum Beispiel sagst ist volljährig und dann
- 24:52gibst du quasi zum Beispiel die Person rein, also Person x.
- 24:56Also ist die Person X volljährig sozusagen oder ist das Alter
- 24:59volljährig? Also weißt du, wenn du jetzt zum
- 25:01Beispiel nur das Alter dieser Person in diese Funktion rein
- 25:03gibst. Lesbar ist es auf jeden Fall
- 25:07theoretisch in an der Stelle ja schon.
- 25:10Sag ich jetzt mal einfach nur vom optischen her, dass man
- 25:12vielleicht sagt, ist diese Person volljährig, so nach dem
- 25:14Motto, oder? Ist dieses Alter volljährig,
- 25:18weißt du das? Das wäre noch so n kleiner.
- 25:21Ich weiß worauf du hinaus willst.
- 25:22Da ist natürlich die Frage, wie der Code davor aussieht, wenn
- 25:25ich jetzt eine variable x habe und da steht das Alter drin, ich
- 25:27gebe das rein, dann weiß ich halt nicht warum gebe ich jetzt
- 25:30in diese Funktion ist volljährig x rein, wenn ich jetzt aber zum
- 25:34Beispiel die die Person habe und mir dann das Alter daraus ziehe,
- 25:38dann sehe ich ja wieder den Bezug zur Person, Person, Punkt,
- 25:41Alter, sozusagen zum Beispiel oder oder die Variable heißt
- 25:46halt irgendwie alte, also wir verzetteln uns vielleicht ein
- 25:50bisschen, ich will das jetzt nicht zu extrem machen.
- 25:53Dass du halt am Variablennamen schon erkennst, dass es sich um
- 25:56das Alter von Personen sowieso handelt.
- 25:57Noch schöner ist natürlich, wenn du aus der Person das Alter
- 26:00ziehst und das Übergibst liegt aber einfach daran, dass ich du
- 26:04kannst. Klar kannst du das Ganze, die
- 26:07das ganze Objekt da reingeben, aber was ist zum Beispiel?
- 26:11Wenn jetzt im Objekt sich was ändert, du du das Alter woanders
- 26:14herbekommst. Das ist jetzt ein sehr
- 26:15minimalistisches Beispiel, aber angenommen irgendwie, die
- 26:18Struktur ändert sich, dann ist deine Funktion nicht mehr autark
- 26:21da drin. Wenn du jetzt sagst ich geb aber
- 26:23das Alter rein, dann wird es immer von außen das Alter geben
- 26:26und die Funktion kann damit arbeiten und ich muss nicht die
- 26:28Implementierung wie ich an das Alter in dem Objekt rankomme
- 26:31innerhalb der Funktion ändern. Also wie gesagt man merkt das
- 26:34ist immer so ein für und wider, das heißt es immer die Frage wie
- 26:36der Code drumrum aussieht. Ja, aber es ist sehr
- 26:39interessant, dass wir einfach mal drüber gesprochen haben,
- 26:40weil das sind ja interessante Gedanken, die wahrscheinlich.
- 26:44Nicht nur wir an so einer Stelle haben, sondern sich vielleicht
- 26:47schon die ein oder andere Person auch schon gefragt.
- 26:50Hat auf jeden Fall und man hört auch nicht auf sich das.
- 26:55Das ist auch ein sehr guter Punkt.
- 26:58Ja, ich würde sagen paar Punkte, so ein 2 kriegen wir auf jeden
- 27:02Fall noch zusammen. Ja, zu den Parametern hätte ich
- 27:05noch einen Punkt, weil das hat mich sehr lange begleitet in
- 27:09meiner Software entwicklungskarriere nenne ich
- 27:10es mal. Und zwar Eingabeparameter als
- 27:14Output verwenden. Ich hoffe du kannst mir folgen,
- 27:19wenn ich. Das ist also, warum ich das so
- 27:22lange begleitet hat in in der Embedded Welt habe ich ein C
- 27:26entwickelt und da war das schon sehr oft so, dass du Referenzen
- 27:32rein gibst in die Funktion innerhalb der Funktion, was
- 27:35damit passiert und du quasi dann ja dieses die die Referenz
- 27:41verändert im Endeffekt, das heißt, so gesehen ist der
- 27:43Eingabeparameter auch gleichzeitig dein Output, weil
- 27:46dein Ergebnis da drin steht oder noch besser du gibst ein
- 27:50Eingabeparameter rein. Und sagt, schreibt mir den
- 27:54Output da rein. Ja, ja, ich.
- 27:56Ich weiß was oft hinaus. Und dass das sind das sind
- 27:59Konstrukte, die auf jeden Fall vorkommen, aber auch enorm die
- 28:03Komplexität steigern, weil du dann genau gucken musst.
- 28:06Also erstmal ist die wird die Benahmung noch schwieriger und
- 28:09du musst gucken, was passiert jetzt wirklich da drin und wo
- 28:12steht mein Ergebnis und wie kann ich das weiterverarbeiten.
- 28:16Aber das ist zum Beispiel. C haben wir das oft so gemacht,
- 28:19dass es weiß nicht ist auch schon ne Weile her.
- 28:21Ich weiß nicht, ob es immer noch so gemacht wird, ich will mich
- 28:23da jetzt nicht zu weit, ich bin da schon ne Weile raus, aber
- 28:26dass du quasi nen ein Rückgabewert hast zum Beispiel
- 28:31ne Art bootisches Konstrukt, weil den Booleschen Datentyp
- 28:34gibt es ja nicht im C. Aber zum Beispiel dir irgendwas
- 28:37gebaut hast, was signalisiert, ob das jetzt erfolgreich oder
- 28:40nicht war und dann in diesem Eingabeparameter zum Beispiel
- 28:43pointer dann dein Ergebnis drin stand.
- 28:46Also du sagst es war erfolgreich und das Ergebnis steht in dieser
- 28:49Eingabevariable das waren so Konstrukte, die auf jeden Fall
- 28:52gang und gäbe waren. Aber auch eine enorme
- 28:55Komplexität da reinbringen. Nur mal um das so aus einem
- 28:58anderen Bereich mal mit hinzuzufügen, finde ich, es war
- 29:02valide, das zu machen, ich habe es auch gemacht, aber es
- 29:05steigert auch enorm die Komplexität.
- 29:08Also ich finde, das ist irgendwie ein interessanter
- 29:11Punkt, weil ich verstehe, wieso man das zum Beispiel auch im
- 29:13Embedded Bereich macht, um halt eben auch möglichst
- 29:16Speicherplatz zu sparen, weil du ja vielleicht auch.
- 29:19Im Endeffekt bei beim Anlegen von neuen Variablen eben halt
- 29:23auch neuen Speicher allokierst und benutzt sozusagen.
- 29:28Das ist das, das verstehe ich. Es ist natürlich auch wieder ein
- 29:32bisschen ein zweischneidiges Schwert, weil wenn wir jetzt
- 29:35kann man auch vielleicht eine ganz gute Überleitung vielleicht
- 29:38kriegen, zu einem neu, zu einem anderen Punkt, also zu dem
- 29:42vierten Punkt quasi. Und das wären sozusagen das
- 29:46keine Seiteneffekte Auftreten bei der implementarspanner
- 29:50Funktion, weil im Endeffekt kann es ja durchaus sein, dass du zum
- 29:54Beispiel ne Funktion aufrufst und erwartest, dass der Input
- 29:59nicht gleich der Output ist, dass du eben nicht diese
- 30:02Referenz hast, dass du sozusagen mit der Variable, die du rein
- 30:05gibst in die Funktion danach nicht mehr quasi, also dass
- 30:09sozusagen diese Variable sich nicht verändert, sondern nur der
- 30:11Output sozusagen verändert. Und wenn du den Output wieder
- 30:14auf die Variable zeigen. Ist dann OK, ist ja klar, dann
- 30:18überschreibst du sozusagen den Wert der Variable.
- 30:21Aber wenn du jetzt zum Beispiel ne dir ne andere Variable
- 30:24nimmst, also zum Beispiel X berechnest und x ist zum
- 30:27Beispiel du gibst x rein und x ist 5 und du kriegst sozusagen
- 30:30eine 3 raus und speichert die 3 in Y und erwartest jetzt danach,
- 30:34dass Y zum Beispiel. Immer noch ist und ne x ist
- 30:39immer noch 5 und y ist 3 ne. Also das was sozusagen von der
- 30:42Funktion zurückkam. Und am Ende hast du aber
- 30:44dadurch, dass du ne Referenz hast, auch den Wert von x
- 30:47geändert und dann ist x und y beides 3.
- 30:51So und das ist ja irgendwie ne gewisse Art von Seiteneffekt,
- 30:53die du erzeugen kannst dadurch. Die laut Cleancode im optimalen
- 30:59Fall auch nicht auftreten soll. Genauso weiß ich, fallen dir
- 31:03noch andere Beispiele von von Seiteneffekten ein.
- 31:08Beispiel konstruieren ist immer nicht so einfach aus dem Stand
- 31:11was, was auf jeden Fall ein guter Punkt war, ist dieses
- 31:14ganze Call by Reference und Callby Value Probleme was du
- 31:17geschildert hast. Man muss ja gar nicht so weit
- 31:21gehen, das kann ja auch sein. Du hast eine Klasse und
- 31:25verwendest Funktionen dieser Klasse und sagst sowas zum
- 31:28Beispiel. Set X oder so nochmals Beispiel
- 31:34und es muss ja nicht mal unbedingt ein Referenzproblem
- 31:37sein, dass du halt quasi. Keine echte Kopie hast, sondern
- 31:41halt die Referenz. Veränderst da drin und dadurch
- 31:43seiteneffekte hast, sondern was ist, wenn innerhalb deiner
- 31:46Klassenfunktion oder Methoden du sagst OK die Funktion wird
- 31:51aufgerufen, ich mach was die Funktion soll, aber Moment mal,
- 31:54wenn das passiert, dann muss ich ja eigentlich hier die Variablen
- 31:57und so anpassen. Mir fällt jetzt gerade kein
- 32:01einfaches Beispiel ein, aber ich hoffe, man kann es trotzdem
- 32:03verstehen und innerhalb deiner Implementierung änderst du
- 32:07andere Klassen. Variablen ab oder gehen wir von
- 32:12Klassen weg? Du hast irgendwelche globalen
- 32:14Variablen, die sich dann anpassen und dieses, das sind ja
- 32:17auch Seiteneffekte oder Side Effects.
- 32:19Darauf wollte ich eigentlich mit der Frage hinaus, weil ich
- 32:22wusste irgendwie intuitiv, dass du auch auf globale Variablen
- 32:25irgendwie hinaus kommst und deswegen, das war eigentlich so
- 32:28mein Ursprungs, du kennst mich so gut.
- 32:31Weil ich halt nur mit globalen Variablen arbeite.
- 32:34Und die immer veränderst. Und die funktionieren.
- 32:37Aber das ist halt klingt immer so nach.
- 32:40Warum sollte ich sowas tun, aber sowas kann sich einschleichen
- 32:43und dann fragst du dich auf einmal was.
- 32:45Passiert hier, warum geht das nicht?
- 32:47Was also es muss doch gehen, was ich hier quasi die Funktion die
- 32:50ich aufrufe, da kann doch nicht irgendwas anderes rauskommen als
- 32:53erwartet. Ja, aber bei so einer
- 32:54Seiteneffekte können halt einfach auch schnell entstehen,
- 32:57das stimmt, das ist halt auch immer noch ein guter Punkt, dass
- 33:00man halt wirklich seine Funktion darauf checkt und überprüft und
- 33:04notfalls halt refectert, falls denn so eine Seiteneffekte
- 33:08auftreten können, weil das Macht, das Macht die Welt nur
- 33:11unfassbar schwierig in Zukunft. Ja, das stimmt.
- 33:15Wenn man ganz blöde Frage noch mal, wenn man jetzt sagt okay
- 33:19man soll jetzt zum Beispiel vielleicht nicht globale
- 33:21Variablen verändern oder keine Membervariablen verändern.
- 33:26Wie weit kann man denn zum Beispiel sagen?
- 33:31Ja gut, aber du hast ja member Variablen innerhalb des
- 33:33Objektes. Wenn du eine Funktion aufrufst,
- 33:35dann kann es ja durchaus sein, dass du member Variablen
- 33:38veränderst. Zum Beispiel war Geta und Setter
- 33:40oder was auch immer. Ja, also mir ist doch ein
- 33:42Beispiel eingefallen, wo man sowas ja macht kann.
- 33:45Angenommen du baust dir eine Art.
- 33:47Datenstruktur wie eine Liste beispielsweise gehen wir mal
- 33:50davon aus, die gibt es nicht, oder oder wir können auch die
- 33:54normale Liste nehmen und wenn nur ein Element hinzufügst.
- 33:58Dann wird ja ne Funktion die dir die Größe der Liste ausgibt,
- 34:03danach was anderes zurückgeben. Also beispielsweise du sagst
- 34:06sowas wie n at beispielsweise fügst n Objekt hinzu in deine
- 34:10Liste, dann wird ja. Lanksize wie auch immer die
- 34:13Funktion dann heißen soll, dir plus 1 quasi zurückgeben, also
- 34:17ein Element mehr als vor deinem at.
- 34:19So, da kannst du ja sagen, ja, das ist ja jetzt schon auch n
- 34:22seiteneffekt. Ja.
- 34:24Weil ich hab n Elemente hinzugefügt und auf einmal ist
- 34:26die Liste 1 länger oder was? Aber das ist ja quasi gewünscht,
- 34:31also das ist ja logisch im Prinzip, wenn du sagst wenn ich
- 34:34etwas hinzufügen möchte ich, dass die Gesamtlänge ja
- 34:37natürlich auch 1 größer ist. Also das würde ich jetzt nicht
- 34:40so als unerwünschten Zeiteffekte.
- 34:44Aber deswegen wollt ich das noch mal kurz abgrenzen, weil das ja
- 34:46wirklich glaub ich interessant ist, weil wenn man zum Beispiel
- 34:48sagt, also es ist keine Regel zu sagen, verändere bloß nicht
- 34:51globale Variablen oder Membervariablen sozusagen ne
- 34:54eines Objektes beispielsweise. Aber es ist ja schon wichtig zu
- 34:59überprüfen, OK, mach ich hier auch wirklich das, was ich
- 35:02vorgebe zu tun oder sneak ich da jetzt noch so n paar versteckte
- 35:08Easter Eggs mit rein? Schöne Fallen für.
- 35:11Andere Entwickler aus dem Team genau.
- 35:15Also wenn ich jetzt zum Beispiel noch mal kurz auf das Kochen
- 35:17Beispiel Zurückgebe und wir beide haben zum Beispiel
- 35:19irgendwie keine Ahnung, uns vorher einen kleinen Code
- 35:22abgemacht beim Kochen und ich sag ja Tino, gib mir doch mal
- 35:24die mandarine und du gibst mir auf einmal keine Ahnung die
- 35:28Pilze, dann wäre das für alle anderen natürlich so ein was ich
- 35:32denke er soll die Mandarine geben, dem jetzt die Pilze so
- 35:36also das ist natürlich Verwirrung, die halt immer nicht
- 35:39nicht sinnvoll sind, weil wir im Vorfeld gesagt haben mandarine.
- 35:42Pilze ja ja genau ne, aber genau, wir können halt also die
- 35:47Analogie mit dem Kochen ist ja super, das ist ja genauso als
- 35:49wenn du sagst. Füge Salz hinzu und die Funktion
- 35:55sagt ne Prise Salz, ne Prise Pfeffer genau und du denkst dir
- 35:59okay warum ist es jetzt pfeffrig?
- 36:01Ich hab da nur Salz hinzugefügt oder oder noch besser Salz und
- 36:05Zucker. Du denkst also was passiert hier
- 36:07und Salz und Salz genau genau und das ist Sau salzig und
- 36:11gleichzeitig total süß. Tolles Gericht und das war auch
- 36:16das letzte Mal, dass du gekocht hast.
- 36:20Na ja, aber das ist ja die Analogie, ist cool, da kann man
- 36:22das, glaube ich mit den Side Effects ganz gut verstehen.
- 36:26Mit den Salt Effects, ja. Source Code effects.
- 36:30Ist niemals Salt Effect. Ja, und ein Punkt, der noch
- 36:37wichtig ist. Für uns vor allem, weil wir
- 36:40haben es auch sehr oft thematisiert, schon in unserem
- 36:42Grundlagenkurs und auch hier im Podcast ist beim Entwickeln
- 36:46einer Funktion, und das ist jetzt Punkt 456, das müsste
- 36:50jetzt 5 sein, 5 sein ist für mich jetzt.
- 36:53Zudem würde ich jetzt noch anbringen, ja, dass man Test
- 36:56schreiben kann, dass die Funktion, da sind sie wieder die
- 36:59Tests und im Prinzip hast du mich rausgebracht, da sind sie
- 37:05wieder, die Test. Dass man die Funktion
- 37:08dementsprechend auch entwickelt, dass es gut testbar ist.
- 37:11Und da spielen die ganzen. Punkte, die wir vorher quasi
- 37:16besprochen haben mit rein, weil je weniger ich darauf achte,
- 37:19umso schwieriger wird es, diese Funktion abzutesten und wir
- 37:23wollen aber die Funktion gut abtesten, um einfach eine
- 37:26Gesamtsoftware zu erreichen, die wirklich clean ist und.
- 37:32Ja, sage ich mal, gut entwickelt ist funktional.
- 37:33Richtig ist, das klingt jetzt immer ein bisschen hochtragend,
- 37:35weil was ist funktional richtig, Bugs gibt es gefühlt immer, aber
- 37:39dass wir halt so wenig wie möglich Bugs drin haben, sage
- 37:42ich mal, weil wir eine hohe Temperatur haben.
- 37:44Am Ende ja, weil alles gut, gut abgetestet ist.
- 37:47Klar, es gibt immer Testfälle, an die man nicht denkt, in dem
- 37:50Moment, dann fällt das auf, dann kann man den Test nachziehen und
- 37:52so weiter. Aber es ist halt schon enorm
- 37:56wichtig, Funktionen gut abtesten zu können.
- 37:58Und ich finde. Also Side Effekt Salt Effects
- 38:01wie wir gerade festgestellt haben machen testen sehr
- 38:05schwierig. Parameter viele Parameter machen
- 38:10Tests schwierig, weil ich muss natürlich einfach, also man kann
- 38:13sich das ja relativ einfach vor Augen führen, für jeden
- 38:16Parameter der, den ich quasi einer Funktion hinzufüge als
- 38:20Eingabeparameter. Je mehr Tests muss ich
- 38:24schreiben, weil ich muss ja die einzelnen Möglichkeiten des
- 38:26Parameters abtesten richtig, mal vereinfacht gesagt, das heißt,
- 38:30allein die Testkomplexität steigt enorm an mit der Anzahl
- 38:34der Parameter, ja. Und alleine wenn man jetzt zum
- 38:37Beispiel mal noch mal um ganz kurz noch mal die Analogie zu
- 38:41zum Kochen herzustellen, weil wir heute so schön dabei sind,
- 38:44wenn du zum Beispiel sagst, du schreibst eine Funktion, die
- 38:46heißt Salze mir das Essen ne und du salzt das Essen und schmeckst
- 38:50es danach ab, abschmecken, ist jetzt der Test.
- 38:52Dann kannst du ja relativ gut für diesen einen Testfall
- 38:56prüfen. Ist es jetzt salzig genug und
- 38:59dann fängst du an und sagst, bitte füge noch ein paar Kräuter
- 39:02hinzu, wie zum Beispiel füge Oregano hinzu, so dann schmeckst
- 39:06du das ab und sagst okay das passt auch so, aber wenn du
- 39:08jetzt zum Beispiel sagst, die Funktion heißt Würze mein Essen
- 39:11und du Schüttest da Salz rein und Kräuter und Paprikapulver
- 39:15und noch Knoblauch und alles. So warte mal Paprikapulver.
- 39:23Immer ebelsüß. Dann ist es ja also, wie willst
- 39:28du dann abschmecken? Also du kannst natürlich auch
- 39:30abschmecken und gucken ob das Gesamtkonstrukt passt, aber du
- 39:33wirst ja zum Beispiel danach, wenn du sagst okay es ist noch
- 39:35nicht salzig genug, dann fängst du ja nicht an zu sagen, ja gut,
- 39:39jetzt haue ich quasi noch mal die ganze Gewürzmischung drauf,
- 39:41die ich gerade drauf geballert habe, sondern du versuchst.
- 39:43Natürlich einzelne Punkte abzutesten, also zum Beispiel
- 39:46nur das Salzen, in dem Fall sozusagen.
- 39:48Und wenn du das einzeln quasi generell über die Funktion
- 39:50kapselst und auch einzeln abtesten kannst.
- 39:54Dann ist das natürlich das Ganze am Ende auch testbarer, was ja
- 39:58auch wichtig ist, ne. Ja, super zusammengefasst.
- 40:03Auf jeden Fall find ich sehr gut.
- 40:06Danke dafür nochmal. Ich würde sagen, wir haben
- 40:12eigentlich auch viele Punkte jetzt genannt, bei weitem nicht
- 40:15alle. Da gibt es bestimmt auch noch
- 40:17Punkte, die wir jetzt gerade übersehen.
- 40:19Einen letzten hätte ich noch, weil das ist ein Thema, was ich
- 40:22auch sehr oft diskutiert habe schon und ich würde es aber auch
- 40:25sehr kurz fassen, weil das ist halt schon da kann man eine
- 40:29Weile drüber reden und vielleicht gibt es auch andere
- 40:31Ansichten, aber. Ich bin gespannt.
- 40:33Ob. Das Thema Dokumentation im Sinne
- 40:38von Kommentare innerhalb einer Funktion OK, und das möchte ich
- 40:42ganz kurz und knapp fassen, weil ich habe das in mehreren
- 40:45Projekten schon unterschiedlich handhaben müssen mit.
- 40:48Hatte ich glaube ich auch mal erwähnt.
- 40:50So jede Zeile Code sollte einen Kommentar haben um zu erklären
- 40:54was da passiert, wo ich mir denke OK ist der Code so
- 40:57schlecht, dass es nicht verständlich ist, was in dieser
- 40:59einen Zeile Code passiert, weil das ist nämlich genau der
- 41:02Keypoint. Code sollte selbst also
- 41:05selbsterklärend sein, ansonsten ist er wahrscheinlich nicht gut
- 41:09geschrieben und sollte es notwendig sein, n Kommentar ran
- 41:13zu machen, dann bitte nur unter der Prämisse, dass es nicht
- 41:17schlecht strukturierten Code oder schlecht geschriebenen Code
- 41:19erklärt. So nach dem Motto Ich weiß, man
- 41:22versteht nicht was hier passiert, aber ich erkläre es
- 41:25dir kurz in einer Zeile, das ist halt absolut Bad Practice, nenne
- 41:30ich jetzt mal. Wenn es aber vielleicht wirklich
- 41:33sehr komplex ist oder vielleicht irgend.
- 41:36Wissen vorausgesetzt, wird an der Stelle, was vielleicht nicht
- 41:40so so trivial ist. Auf dieser einen Zeile oder
- 41:44innerhalb dieser einen Funktion um Gottes Willen.
- 41:47Klar kann man Kommentare schreiben, aber ich finde, es
- 41:49darf niemals als Grund genannt werden, ja, damit man versteht,
- 41:52was innerhalb dieser Funktion passiert.
- 41:53Ja, das ist ein guter Punkt. Gehe ich definitiv mit im
- 41:58Endeffekt. Ist es immer nicht schlecht?
- 42:00Ich nicht nicht zu sagen, ja, das geht aber nicht ohne
- 42:03Kommentar, sondern eher erst mal die Frage stellen, wie kann ich
- 42:07den Code schreiben, dass es also, dass es vielleicht auch
- 42:09ohne Kommentar geht, ne wie gesagt ich, ich würd auch sagen
- 42:14wenn es zu komplex und manchmal gibt es ja wirklich sehr
- 42:17komplexe Sachen, die du auch wirklich vielleicht sehr
- 42:19mathematisch auch irgendwie erklärst.
- 42:22Dann kann man vielleicht mal einen Kommentar dranpacken,
- 42:25obwohl natürlich auch wiederum der Funktionsname und das, was
- 42:28in dieser Funktion passiert. Kapselt sein sollte, dass der
- 42:32Funktionsname ausreichend sein sollte für die Erklärung von
- 42:35dem, was im Code passiert. Ja, aber so n Beispiel ist, du
- 42:39hast zum Beispiel ne Konstante. Weil du gerade meintest,
- 42:43mathematisch physikalisch, wo einfach vielleicht erklärt ist,
- 42:47warum diese Konstante wichtig ist oder so einfach mal so ne so
- 42:49ne Erklärung für diesen einen festen Wert beispielsweise, da
- 42:53würd ich sagen, OK, cool erklärt noch mal warum jetzt da so ne
- 42:57Konstante entwickelt wurde, wenn es jetzt nicht gerade peace oder
- 43:01so was fast jeder kennt, aber also weiß worauf ich hinaus
- 43:04möchte, da finde ich ist das denn ein Fall okay bei pi weiß
- 43:07man ja, dass es 3 ist, genau exakt 3.
- 43:11Es tut mir leid, dass es soweit. Keiner weiß es.
- 43:14Hast du sehr gut noch mal sehr gut noch mal zusammengefasst.
- 43:17Ja, dann würde ich einfach noch mal kurz alle Punkte einmal kurz
- 43:21nennen, die wir und also die wir durchgegangen sind und die auch
- 43:25vielleicht noch mal als Zusammenfassung.
- 43:27Für das Paket zusammen und dann ab nach Hause.
- 43:30Ja, vielleicht noch mal Zusammenfassung für dich, lieber
- 43:32Zuhörer, liebe Zuhörerin, auch noch mal interessant sind also
- 43:36als ersten Punkt, der wirklich wichtig wäre, wenn man
- 43:39Funktionen schreibt, achte doch bitte drauf und versucht daran
- 43:42zu denken, dass. Aussagekräftige Namen sein
- 43:46sollen und dass es auch kurze und prägnante Namen sein sollen
- 43:50für die Benahmung der Funktion. Was wir am Anfang gesagt hatten,
- 43:54dann ist es wichtig, dass es wirklich ne ein eindeutige
- 43:57Verantwortlichkeit hat, also entweder mixen oder kochen und
- 44:00nicht mixen oder kochen, eine Funktion quasi benannt wird und
- 44:06damit halt auch das da drin quasi nicht beides tut.
- 44:11Dann sollten sollte man darauf achten, dass es eine minimale
- 44:14Anzahl von Parametern gibt, also nicht übermäßig viele
- 44:17hinzufügen, wenn es nicht unbedingt sein muss, wirklich
- 44:19genau darüber nachdenken. Auch darauf achten, dass nicht
- 44:23unerwünschte Side Effects oder Salt Effects, wie wir es genannt
- 44:27haben, stattfinden. Also wenn du dein erstes Side
- 44:30später der Side seiner Wunder genau wenn du dein Essen salzt,
- 44:34sollte nicht noch Zucker dazukommen.
- 44:37Das war Punkt 4.5. Ist achtet darauf.
- 44:41Dass sozusagen du auch Tests dazu schreibst und auch das.
- 44:45Sagen deine Funktion möglichst testbar ist Testbar geschrieben
- 44:48ist und Punkt 6 Dokumentation, also ein der Code sollte sich im
- 44:53optimalen Fall immer selbst erklären und Kommentare sollten
- 44:58im Normalfall eigentlich wirklich eine absolute Ausnahme
- 45:00sein und mit diesen 6 Punkten kann man auf jeden Fall schon
- 45:04mal einiges anfangen und ich hoffe das waren alle.
- 45:08Weil es war. Also ich.
- 45:09Das waren das waren die 6 Punkte, die wir Überblick hast.
- 45:14Da bin ich mir sehr sicher. Und wie gesagt, was uns auf
- 45:17jeden Fall interessieren würde ist, wir haben auf jeden Fall
- 45:20nicht alle Punkte besprochen, die jetzt irgendwie Thema von
- 45:24Cleancode im Bereich Funktionen sind.
- 45:26Wenn ihr noch was einfällt, was wir vergessen haben, was wir
- 45:28jetzt nicht besprochen haben, dann schreibt uns doch einfach
- 45:30mal bei Instagram oder auf unser Podcast Mail die links zu den
- 45:35beiden Sachen und auch zu allen anderen Plattformen, wo wir
- 45:37unterwegs sind, findest du in den Show Notes und in dem Sinne
- 45:40würde ich noch abschließend sagen, wenn dir die Folge
- 45:42gefallen hat, dann lass ein Like da.
- 45:45Empfehle auch gerne als kleine Hausaufgabe 2.
- 45:48Deinen Freundinnen, Freunden, Arbeitskollegen, was auch immer,
- 45:51wo du dich gerade aufhältst, unseren Podcast.
- 45:55Ja, und in diesem Sinne würde ich sagen, wir wünschen dir noch
- 45:58einen schönen Tag und wir hören uns beim nächsten Mal wieder.
- 46:01Deine Coding Buddies gemeinsam besser.
- 46:11Was?