Unabhängig von dieser wegweisenden Entscheidung musste ich selbst ein Haustierprojekt von VBA nach C # übersetzen. Normalerweise prototypisiere ich alles in MS Access, und dann wird der Code in eine seriösere Datenbank (sprich: SQL Server) und eine andere Programmiersprache verschoben.
Und hier sind die Zyklen.
In Basic und Pascal gibt es eine Schleife Verfahren
für i = Lower zu Ober Schritt für Schritt
...
nächste
Es ist in dem Sinne universell ist , dass sie sowohl von unten nach oben gehen können und von oben nach unten. Es kann sowohl bei Schritt> 0 als auch bei Schritt <0 verwendet werden.
Wie schreibt man dasselbe in C / C ++ / C # / JavaScript-Notation? Es stellt sich heraus, dass ihre for- Schleife überhaupt nicht der Basic- Schleife entspricht:
for (i = Lower; i <Upper + 1; i + = Step) {…}
So ändern Sie dies, um für den Fall zu funktionieren, dass Step <0 ist ? Die folgende, nicht die eleganteste Lösung fällt mir ein:
z(i = Unteres; Vorzeichen (Schritt) * i <= Vorzeichen (Schritt) * Oberes; i + = Schritt) {…}
Es wird, wie das Original für… next, bei Schritt = 0 wiederholt.
Die Kollegen schlugen eine andere Option vor:
für (i = Unterer; Schritt> 0? I <= Oberer: i> = Oberer; i + = Schritt) {...}
Da wir den letzten Wert der Schleifenvariablen benötigen Upper, und es hat auch am Körper der Schleife teilgenommen, kann als Schleife mit einer Nachbedingung programmiert werden:
i = Lower - Step;
mache
ich + = Schritt;
...
während (i! = Upper)
Dieser Code funktioniert jedoch nicht, wenn Step den Bereich Lower… Upper nicht vollständig aufteilt.
Es stellt sich heraus, dass die Schleife, die den Bereich in Python verwendet, auch nicht das Verschieben von einem größeren Wert zu einem kleineren Wert, Bereich (b, a) mit b>, zulässt a setzt einfach einen leeren Bereich.
Welche Lösung würden Sie vorschlagen?