Entwicklung / ROBLOX
Luau-Bedingungen: if und elseif an Fortschrittsgrenzen
Wähle einen eindeutigen Zustand aus einer Etappenzahl. Prüfe Reihenfolge, Grenzwerte und den Unterschied zwischen unabhängigen if-Anweisungen und einer elseif-Kette.
Definiere zuerst die Zustände #
Eine erfundene Aufgabe hat zehn Etappen. Für die Übungsanzeige gelten new bei null, started ab eins, halfway ab fünf und complete ab zehn. Das sind eigene technische Bezeichner. Die Einordnung einer Zahl bestätigt keinen Spielerfortschritt, vergibt kein Abzeichen und speichert keine Daten.
Notiere Grenzen vor dem Code. Bei fünf sind sowohl mindestens eins als auch mindestens fünf wahr. Welcher Zustand soll gewinnen? Für eine einzige Anzeige ist ein ausgewählter Zustand statt mehrerer konkurrierender Meldungen nötig. Diese Vereinbarung bestimmt die Reihenfolge der Prüfungen und die Erwartungen des Aufrufers.
Prüfe den höheren Wert zuerst #
classifyProgress prüft im ersten Beispiel zehn, fünf und eins. Eine if-elseif-else-Kette führt den ersten passenden Zweig aus. Sieben passt zur Fünfergrenze und liefert halfway; die kleinere Grenze wird nicht mehr ausgewertet. Bei null passt keine Grenze, sodass else greift.
Starte das Beispiel unabhängig und vergleiche new, started, halfway, complete für 0, 1, 5, 10. Die Eingaben sind absichtlich klein und bekannt. Die Originale wurden tatsächlich mit einem eigenständigen Luau-Interpreter ausgeführt. Das prüft Sprachverhalten, kein Roblox-Spielerkonto und kein vollständiges Fortschrittssystem.
local function classifyProgress(count)
if count >= 10 then
return "complete"
elseif count >= 5 then
return "halfway"
elseif count >= 1 then
return "started"
else
return "new"
end
end
for _, count in {0, 1, 5, 10} do
print(classifyProgress(count))
endErkenne eine umgekehrte Reihenfolge #
Steht count >= 1 zuerst, landet zehn bei started. Spätere Zweige laufen nicht, obwohl auch die Abschlussbedingung wahr ist. Die Zahl und >= sind nicht das Problem; die Priorität ist falsch. Eine frühe breite Bedingung beansprucht Eingaben der späteren spezifischen Bedingung.
Schreibe Eingabe, alle passenden Bedingungen und den ersten gewählten Zweig auf. started einfach durch complete zu ersetzen würde auch eine Etappe zum Abschluss machen. Korrigiere Reihenfolge oder Zustandsvereinbarung. Explizit getrennte Bereiche helfen, wenn sich die Bedingungen nicht nach Spezifität ordnen lassen.
Vergleiche unabhängige if-Anweisungen #
Das zweite Beispiel verwendet count=7 und zwei unabhängige if-Prüfungen. Beide passen und geben started sowie halfway aus. Die folgende elseif-Kette zeigt für dieselben Daten nur halfway. Getrennte if-Anweisungen prüfen unabhängig; eine Kette wählt einen Zweig.
Mehrere unabhängige Prüfungen eignen sich für vereinbare Aktionen. Eine einzelne Übungsanzeige verlangt normalerweise eine eindeutige Auswahl. Sage die Zahl der Meldungen vor dem Lauf voraus und vergleiche sie. Mehrere if sind nicht immer falsch, sondern nur dann, wenn sie dem gewünschten Verhalten widersprechen.
local count = 7
if count >= 1 then
print("started")
end
if count >= 5 then
print("halfway")
end
if count >= 5 then
print("halfway")
elseif count >= 1 then
print("started")
endTrenne Wahrheitswert und Zahlenvergleich #
In Luau gelten null und die leere Zeichenkette als wahr; false und nil sind falsch. if count then prüft deshalb nicht, ob die erste Etappe erreicht wurde. Hier benötigen wir den ausdrücklichen Vergleich count >= 1 statt einer Existenzprüfung.
Prüfe reale Eingaben separat auf endliche ganze Zahlen im vereinbarten Bereich. Die Beispiele verwenden bekannte Übungszahlen und validieren keinen vom Client gemeldeten Fortschritt. Interpretiere nil oder Text nicht stillschweigend als neuen Teilnehmer, dessen Zustand später eine Belohnung auslösen könnte.
Prüfe beide Seiten jeder Grenze #
Verwende 0, 1, 4, 5, 9 und 10. Erwartet sind new, started, started, halfway, halfway und complete. Prüfe null gegen eins und danach jeweils den Wert vor einer Grenze sowie die Grenze selbst. Dadurch wird ein versehentliches > statt >= sichtbar.
Die Prüfdatei vergleicht außerdem richtige und umgekehrte Priorität bei zehn und zählt unabhängige Meldungen. Sie bestätigt dieses Beispiel. Neue Bereiche oder Zustände erfordern eine aktualisierte Matrix. Ein früher bestandener Test beweist keine später hinzugefügte Regel.
Trenne Zustand und Anzeige #
classifyProgress liefert einen technischen ID. Die sichtbare Übersetzung kann getrennt anhand dieses ID ausgewählt werden. Übersetzen sollte die Grenzen nicht verändern. Regeln ausschließlich im Schaltflächentext aufzubewahren kann Code und übersetzte Anzeige auseinanderbringen.
Dokumentiere alle vier IDs und Bedeutungen. Ein anderer Anzeigetext führt keine Spielaktion aus. Beeinflusst ein zukünftiger Zustand Zugriff, müssen Serverregeln separat geprüft werden. Eine sichtbare complete-Zeile beweist nicht die Herkunft der Zahl und reicht nicht zur Belohnungsfreigabe.
| Prüfung | Erwartung |
|---|---|
| 0 | new |
| 4 | started |
| 5 | halfway |
| 10 | complete |
Übergib Regeln und Prüfungen #
Speichere Priorität, erlaubte Eingaben, IDs und Werte beiderseits der Grenzen. Erkläre, ob ein Zustand oder mehrere unabhängige Aktionen benötigt werden. So kann ein anderer Entwickler nachvollziehen, warum Umordnen das Ergebnis ändert.
Ergänze eine neue Grenze zuerst in der Matrix, dann im Code, und prüfe Nachbarwerte sowie bisherige Zustände. Dies bleibt reine Luau-Berechnung ohne Roblox-Objekte, Netzwerk, Speicher oder tatsächliche Etappenbesuche. Das Ergebnis ist eine überprüfbare Vereinbarung für eine Auswahl.
| Feld | Notieren |
|---|---|
| Eingabe | Bekannte Etappenzahl |
| Priorität | Hohe Grenze zuerst |
| Ergebnis | Ein Zustands-ID |
| Prüfungen | Beide Grenzseiten |