Hallo, ich habe einen Beispiel-Code übernommen und wundere mich über manche schreibweisen, die scheinbar undokumentert sind, oder ich zu Blöd es zu finden.
Ich vermute anhand des Codes das dieses hier für ein "else" steht:
} (( {
Die vermutung weil es mitten in tausend "if"- verschachtelungen steht.
Kann das jemand bestätigen ?
Was heisst das denn ? ich finde leider nichts dazu. Die erste geschweifte Klammer beendet doch logischerweise eine if, was die zwei öffnenden Klammern dann tun ist mir schleierhaft, aber danach öffnet ja wieder eine geschweifte Klammer.
Also irgendwas passiert doch da, kann nur eine "else" sein, macht doch sonst keinen Sinn.
Wenn es so gut dokumentiert ist, muss das ja irgenwo zu fnden sein.
Man kann immer mehrere Funktionen und anweisungenin einem Block mit {} gruppieren.
})) {
In diesem Fall ist die zweite runden Klammer die schließende Klammer des IF.
Die schließende geschweifte Klammer ist ein Teil der "Bedingung" des IF.
Die öffnende geschweifte Klammer ist der Block für den das IF gilt.
wikipedia ist auch nicht immer das beste wenn es ums Erklären geht.
Eine Lambda-Funktion in C++ ist wie eine kurze Notiz, die du direkt dort schreibst, wo du sie brauchst – statt einen ganzen Brief (eine "normale" Funktion) zu verfassen. Sie hat keinen Namen, kann aber Eingaben entgegennehmen und Ergebnisse liefern. Man nutzt sie oft für einfache, einmalige Aufgaben, z. B. um eine Aktion kurz in einer Schleife oder einer anderen Funktion zu definieren.
Einfaches Code-Beispiel:
Stell dir vor, du möchtest eine Mini-Funktion schreiben, die zwei Zahlen addiert. Mit einer Lambda-Funktion geht das so:
void setup() {
Serial.begin(115200);
// Lambda-Funktion direkt aufrufen und Ergebnis ausgeben
Serial.print("Ergebnis: ");
Serial.println( [] (int a, int b) // Definition der Parameter der Lambda-function
{ return a + b; } // Code der lambda-function
(3, 5) // sofortiger Aufruf mit den Zahlen "3" und "5"
); // schließende runde Klammer von Serial.println
}
void loop() {
}
Und da es ja um kompakte Schreibweise geht wird alles direkt hintereinander geschrieben.
Das ist dann schön kompakt aber für jemanden der es gerade erst lernt schwerer zu verstehen.
void setup() {
Serial.begin(115200);
// Lambda-Funktion direkt aufrufen und Ergebnis ausgeben
Serial.print("Ergebnis: ");
Serial.println( [](int a, int b) { return a + b; }(3, 5) ); // Ausgabe: 8
}
void loop() {
}
So würde das ganze mit einer normalen function aussehen
// Normale Funktion "add" definieren
int add(int a, int b) {
return a + b;
}
void setup() {
Serial.begin(115200);
// Funktion aufrufen und Ergebnis ausgeben
int ergebnis = add(3, 5);
Serial.print("Ergebnis: ");
Serial.println(ergebnis); // Ausgabe: 8
}
void loop() {
}
Vielleicht noch als Ergänzung: Lambdas werden häufig als Callbackfunktionen genutzt, und direkt an der Stelle geschrieben, wo "normalerweise" der Name einer Callbackfunktion übergeben würde, die irgendwo anders definiert wurde. Üblicherweise interessiert der Name ohnehin niemanden, weil die Funktion für nichts anderes benutzt wird und mit einem Lambda ist die Funktion genau da zu finden, wo sie benutzt wird.
Achja. Kritisieren aber nicht schreiben wie es dann aussehen würde.
Wenn es denn gepostet worden wäre. Kenner der Materie würden einen Blick drauf werfen und wissen jo passt. Anfänger würden etwas daraus lernen und mehr verstehen wenn es explizit gepostet worden wäre.