Lotto richtig tippen

Du suchst ein Programm für einen bestimmten Zweck?
Benutzeravatar
Meillo
Moderator
Beiträge: 8818
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Lotto richtig tippen

Beitrag von Meillo » 16.01.2022 12:06:18

thoerb hat geschrieben: ↑ zum Beitrag ↑
16.01.2022 11:42:58
Das das schlechter Stil ist, lese ich hier das erste Mal.
Was schlechter Stil ist, ist eine komplexe Frage. Auch abseits von Gewoehnung und in einer Programmierkultur ueblichen Konstrukten, die eine Person dieser Kultur als Ganzes wahrnimmt und nicht als ihre Teile, sind Fragen nach gutem Code immer Kompromisse beim Abwaegen zwischen verschiedenen Zielen, die man erreichen will. Je nachdem wie jemand die Prioritaeten setzt -- was sich von Person zu Person, von Programmiersprache zu Programmiersprache und von Projekt zu Projekt unterscheiden kann -- sind unterschiedliche Dinge guter oder schlechter Stil. Pauschale Aussagen lassen sich da selten treffen, jedenfalls meiner Meinung.

Ich finde es gut, wenn unterschiedliche Personen darlegen was sie in dem Fall als den besseren Stil erachten und vor allem begruenden wieso. Das schafft eine Basis um eigene Meinungen zu bilden, weil man dann verschiedene Betrachtungsweisen und deren jeweilige Vorzuege kennt.
Use ed once in a while!

reox
Beiträge: 2464
Registriert: 06.06.2006 22:09:47
Lizenz eigener Beiträge: MIT Lizenz

Re: Lotto richtig tippen

Beitrag von reox » 16.01.2022 12:32:29

Das es "schlechter Stil" ist, kommt wohl daher, dass if (ausdruck == true) eine implizite typenkonvertierung vornimmt. Das kann im Zweifelsfall dann ein falsches Ergebnis geben.
Beim programmieren ist explizit sein halt immer (mh naja das ist auch streitbar) besser als implizit.
Jedenfalls ist if (ausdruck === true) sehr implizit, dass (ausdruck) hier eben einen boolschen wert ergeben soll, der dann true ist und (ausdruck == true) sagt nur, dass eine implizite typenkonvertierung möglich sein soll und nach true evaluieren. Nachdem aber if (ausdruck) das selbe ergebnis hat, und man ebenfalls nicht unnötigen code schreiben soll (Ist ja auch eine form von explizit sein), würde man eben versuchen das unnötige == true zu vermeiden.

tobo
Beiträge: 1996
Registriert: 10.12.2008 10:51:41

Re: Lotto richtig tippen

Beitrag von tobo » 16.01.2022 12:33:24

Meillo hat geschrieben: ↑ zum Beitrag ↑
16.01.2022 11:39:01
tobo hat geschrieben: ↑ zum Beitrag ↑
16.01.2022 00:32:35
thoerb hat geschrieben: ↑ zum Beitrag ↑
12.01.2022 18:58:04
oder so:

Code: Alles auswählen

 if(in_array($real[$i], $tipp) == false) {
Sowas wäre mit Sicherheit nicht anzuraten, da das Prüfen auf ==true/false schlechter Stil ist. Man würde ja auch nicht fragen if a>b==False oder sprachtechnisch, ist Garagentor offen==richtig. Das ist sprachtechnisch unterirdisch, zumindest für das false.
``Sprachtechnisch unterirdisch'' finde ich etwas hart gesprochen.
Du hättest also kein Problem damit deinen Nachbarn zu fragen: Ist dein Garagentor offen gleich richtig?
Zweiteres finde ich natuerlichsprachlicher und einfacher weil direkter verstaendlich. Insbesondere trifft das auf alle Arten von Verneinungen oder gar doppelten Verneinungen zu. Darauf wolltest du, tobo, wohl hinaus, oder?
Selbstverständlich - die Antwort ist im if ja bereits gegeben; da muss man ja nicht nochmal nachfragen.
Für den True-Vergleich käme dann noch erschwerend hinzu, dass je nach Sprache der Wert True = 1 ist und der Vergleich aber nach ungleich 0 (False) stattfindet - der Vergleich also nicht nur stilistisch unschön, sondern auch technisch falsch wäre.
Das verstehe ich nicht. Kannst du ein Beispiel machen was du damit meinst.

Code: Alles auswählen

#include <stdio.h>
#include <stdbool.h>

int main(){
    if(3)
        printf("true\n");
    else
        printf("false\n");
    if(3 == true)
        printf("true\n");
    else
        printf("false\n");
    return 0;
}

Benutzeravatar
Meillo
Moderator
Beiträge: 8818
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Lotto richtig tippen

Beitrag von Meillo » 16.01.2022 12:58:35

Danke fuer die Beispiele, tobo. Jetzt verstehe ich besser was du meinst. Zusammen mit reox' Post kann man sehen wie unterschiedlich die Dinge bewertet werden koennen.

In manchen Faellen wuerde man versuchen explizit auf den Typ zu pruefen. In PHP mit === und in C mit einem Wert 1 fuer true. In anderen Faellen ist das nebensaechlich und man kann sich den expliziten Vergleich sparen. Das haengt von den konkreten Ausdruecken und den Rueckgabewerten der genutzten Funktionen ab. in_array() liefert immer einen Bool. Wozu in dem Fall also explizit oder gar typgebunden vergleichen? Aber fuer Personen, die nicht den Rueckgabetyp jeder Funktion kennen, macht es vielleicht mehr Sinn, explizit zu pruefen, damit sie nicht ueberrascht sind, wenn unterschiedliche Dinge zurueck kommen, wie z.B. bei fgets(), das in PHP false oder "" liefern kann, wobei zweiteres als false interpraetiert wird obwohl es ein valider Wert ist und eigentlich true sein sollte. Da steht man dann an der Frage, was einem wichtiger ist ... denn es ist auch eine Komplexitaet, wissen zu muessen wann man den expliziten Vergleich weglassen kann und wann er entscheidend ist. Es kann auch sinnvoll sein, wenn der Code einheitlich ist, weil das besser ueber unterschiedliche Erfahrungslevel der Entwickler skaliert. Einheitlicher Code ist auch eine Form von gutem Stil. ;-)

Ich will damit nur sagen, dass diese Fragen selten eindeutig und klar beantwortet werden koennen.
Use ed once in a while!

reox
Beiträge: 2464
Registriert: 06.06.2006 22:09:47
Lizenz eigener Beiträge: MIT Lizenz

Re: Lotto richtig tippen

Beitrag von reox » 17.01.2022 09:01:25

Eine andere Methode ist zB eine ternäre abfrage, zB so in python:

Code: Alles auswählen

if x is None:
    pass
elif x is True:
    pass
elif x is False:
    pass
Wenn man nur if x: verwenden würde, würde das nicht gehen.

buddy67
Beiträge: 169
Registriert: 30.06.2016 22:52:15

Re: Lotto richtig tippen

Beitrag von buddy67 » 02.02.2022 21:52:06

Ich habe so einiges gelernt dank Eurer Hinweise und Tipps! Danke!

Mittlerweile habe ich das Script so weit, das es tut was es meiner Meinung nach tun soll :) Der Quelltext ist zwar mittlerweile wieder so "grottig", das ich selbst damit manchmal nicht mehr klar komme :) aber es funktioniert!

Und denen hier die mir empfohlen haben Roulett zu spielen oder mir versucht haben die Wahrscheinlichkeitstheorie näher zu bringen: Ihr habt alle Recht! Die Antworten derer, die sich meine Post's wirklich durchgelesen und geantwortet haben waren mir allerdings viel lieber! :)

cheers! :)

Antworten