Solange nichts weiter in der Loop ausgeführt werden muss, macht es keinen offensichtlichen Unterschied.
Das Problem ist nur, dass wenn dein Programm "gleichzeitig" noch auf etwas anderes reagieren soll (z.B. Not-Aus Taster), wird das mit der while() nicht funktionieren.
Du kannst dir das so vorstellen: Mit while() bleibt das Programm solange in der Schleife, bis die Bedingung erfüllt ist. Mit if() wird die Loop durchlaufen, wenn if() wahr dann führe das aus, was im if() Block steht, wenn if() nicht wahr, dann fahre mit dem restlichen Code weiter....
Wir kennen nicht deinen ganzen Code und nicht die library, die benutzt wird.
ich gehe aber davon aus, dass stepper.run() nur jeweils 1 step triggert.
Bedeutet, dass bei der while-Schleife diese bis zur Erfüllung der Abfragebedingung immer wieder steps generiert werden.
Bei der if-Abfrage wird jedoch immer wieder zum Anfang der loop() zurückgesprungen, dann die Zielkoordinaten wieder neu eingelesen und dann erst der nächste step getriggert.
Hast du dann noch andere Befehle in der main loop(), im schlimmsten Fall einen oder mehrere delay-Befehle, dann werden die Motoren nur sehr gequält langsam und wahrscheinlich sehr unruhig laufen, wenn überhaupt.
Also:
while-Schleife nehmen, dann bist du auf der sicheren Seite, wenn während des Motorlaufs nichts weiter gemacht werden soll
if-Schleife nehmen, wenn noch mehr zeitnah ausgeführt werden soll, aber alle unnötigen Verzögerungen vermeiden, und ALLE delays raus und timer durch millis ersetzen, wenn unbedingt nötig