- Registriert
- Jan. 2021
- Beiträge
- 3.099
Es gibt (leider) Optionals in Java und den ternären Operator ? :
den Safe navigation operator ?. gibt es zum Glück in Java nicht.
den Safe navigation operator ?. gibt es zum Glück in Java nicht.
Folge dem Video um zu sehen, wie unsere Website als Web-App auf dem Startbildschirm installiert werden kann.
Anmerkung: Diese Funktion ist in einigen Browsern möglicherweise nicht verfügbar.
if (person != null && person.getAddress() != null && person.getAddress().getStreet() != null)
if (Optional.of(person).map(Person::getAddress).map(Address::getSteet).isPresent())
Das wäre wohl ähnlich zu dem hier:tollertyp schrieb:und das hab ich schon "schlimmer" gesehen
int getOrDefault(int[][] p, int r, int c, int d) {
if (r >= 0 && c >= 0 && r < p.length && c < p[r].length && p[r][c] != -1) {
return p[r][c];
}
return d;
}
könnte halt einfach intollertyp schrieb:if (person != null && person.getAddress() != null && person.getAddress().getStreet() != null)
if (person?.getAdress()?.getStreet() != null)
text.add("Straße: " + (person?.getAdresse()?.getStreet() ?? "unbekannt"))
is {} varname
syntax bin.if(input is {} person && person.Address is {} address)
{
}
oder via property matching
if(p is {Address: not null} address)
{
}
Sieht gut aus, aber das implizierttollertyp schrieb:einen "Ersatzwert" nehmen kann, wenn es um so etwas geht:
text.add("Straße: " + (person?.getAdresse()?.getStreet() ?? "unbekannt"))
null
in Person, Adresse oder Street und gleichzeitig keinen festen Default-Wert. Eigentlich stimmt dann etwas mit den Datentypen nicht. hmmDie brauchen keinen Default-Wert, wenn die null sind, dann sind sie null und alles danach auch null - der Wert am Ende gilt ja für den gesamten Ausdruck.CyborgBeta schrieb:aber das impliziertnull
in Person, Adresse oder Street und gleichzeitig keinen festen Default-Wert.
Der Elvis-Operator isttollertyp schrieb:ich stehe gerade auf dem Schlauch?
The notation of the Elvis operator was inspired by the ternary conditional operator, ? :, since the Elvis operator expression A ?: B is approximately equivalent to the ternary conditional expression A ? A : B.
im C# Umfeld ist der null-conditional operator (den du als safe navigation operator bezeichnest) der Elvis Operator, weil null coalescing ?? ist und nicht ?:CyborgBeta schrieb:und der Safe navigation operator ?. ist etwas anderes.
mir ist schon klar, was der Elvis-Operator ist. Und ja, dafür würde ich auch die min-Funktion nutzen, weil sie klarer sagt was das Ziel des Codes ist (Stichwort Clean Code, hat wie gesagt kaum was mit Sprachen und Sprachfeatures zu tun sondern eher "Denkweisen") und weniger Redundanz hat.CyborgBeta schrieb:Der SNO scheint, vorsichtig gesagt, sinnvoll zu sein. Aber anstatt a < b ? a : b kann ich auch Math.min(a, b) schreiben.
Das habe ich nicht verstanden. Also die min- und max-Methoden gibt es nicht für den Elvis-Operator, sondern um das Minimum oder das Maximum zu bestimmen.und für den Elvis-Operator gibt es die min- und max-Methoden.
Date antragsdatum = request.getAntragsdatum() != null ? request.getAntragsdatum() : new Date();
request.getAntragsdatum()
redundant. Und genau deshalb finde ich so einen Ausdruck besser:Date antragsdatum = request.getAntragsdatum() ?? new Date();
Ich meine damit: Gib den Funktionen in deinem Beispiel die passenden sprechenden Namen und dann hast du schon quasi dein refactoring.CyborgBeta schrieb:Das würde einen Nachmittag füllen.
Selbst wenn das relevant wäre, dein Code ist zu guten Teilen imperativCyborgBeta schrieb:Schau dir rein funktionale Programmiersprachen an.
Mein Ruby-Herz schlägt höher bei solchen Zeilen . Wobei das in Ruby auch ohne explizitestollertyp schrieb:if (Optional.of(person).map(Person::getAddress).map(Address::getSteet).isPresent())
if
geht.Ruby würde dir bestimmt gefallen. Da gibt es Dinge wietollertyp schrieb:Date antragsdatum = request.getAntragsdatum() != null ? request.getAntragsdatum() : new Date();
geht irgendwie nicht so richtig mit min/max...
a ||= b
für "weise a an b zu, falls a null/false ist". Sehe aber gerade, C# hat das wohl auch.Code sollte so geschrieben werden, das er selbsterklaerend ist. Wenn Kommentare benoetigt werden, um Code verstaendlich zu machen, ist in den meisten Faellen ein schlechtes Zeichen.Tornhoof schrieb:Wie wär's mal mit Kommentaren?
// check if product is not whitelisted
if (rules.stream().noneMatch(p -> StringUtils.equalsIgnoreCase(p.getProductState(), ProductStates.WHITE) {
return ProductStates.GREY;
}
Hat jemand was anderes gesagt?CyborgBeta schrieb:Und na ja, wie lang eine Methode sein darf, ist fast subjektiv.
Dass hier zwingend Kommentare nötig wären, wenn es Methoden für die Schleifen gäbe. Oder liege ich da falsch?tollertyp schrieb:siehst du nicht so?