Questo programma proverà a rispondere all'articolo di Gary Luckenbaugh sulle best practice nell'uso del FOR…NEXT.
CLS ''' RULE #1 ' Always enter a FOR-NEXT loop at the FOR. Don’t even think about entering ' the middle of a loop. Not surprisingly, “there be dragons here” if you ' do. ' ' In ugBASIC you can enter into a FOR...NEXT without problems. PRINT "RULE#1" PRINT DIM x1 AS BYTE x1 = 1 GOTO inTheMiddle1 FOR x1 = 1 TO 10 inTheMiddle1: PRINT x1;" "; NEXT x1 PRINT ''' RULE #2 ' Never leave a FOR-NEXT mid-flight. Use FOR-NEXT to count from the ' beginning to the TO value with steps of STEP. If you feel you must ' leave a FOR in mid-flight, then FOR is not the proper construct. ' ' In ugBASIC you can exit out from a FOR...NEXT without problems. PRINT:PRINT "RULE #2" PRINT DIM x2 AS BYTE FOR x2 = 1 TO 10 PRINT x2;" "; IF x2 > 4 THEN GOTO outOfFor2 NEXT x2 outOfFor2: PRINT ''' RULE #3 ' If you absolutely must jump out of a FOR, then you must always ' come back to where you left off. The best way to do this is ' via GOSUB to jump out and then RETURN to where you were. ' At the location where you jump out, there should be no ' FORs with the same control variable, in this case i. ' ' In ugBASIC you can jump out using GOTO (see rules #1 and #2) ' and you can use the same variable if you jump inside a GOSUB. ''' RULE #4 ' Never enter a FOR loop recursively, unless you are using a modern ' BASIC, and even then use recursive subs/functions and not GOTOs ' or GOSUBS ' ' ugBASIC does not support recursion ''' RULE #5 ' Don’t try to change the final value or the step when a FOR-NEXT ' is in-flight. You may get away with this on some BASICs and ' not on others. ' ' In ugBASIC you can change initial, final and step value. PRINT:PRINT "RULE #5" PRINT DIM x5 AS BYTE, f5 AS BYTE, t5 AS BYTE, s5 AS BYTE f5 = 1: t5 = 10: s5 = 2 FOR x5 = f5 TO t5 STEP s5 PRINT x5; " "; IF x5 > 4 THEN t5 = 10 s5 = 4 ENDIF NEXT PRINT ''' RULE #6 ' Don’t change the control variable in-flight: ' ' In ugBASIC you can change the contro variable, as you like. PRINT:PRINT "RULE #6" PRINT DIM x6 AS BYTE FOR x6 = 1 TO 10 PRINT x6;" "; IF x6 > 3 THEN x6 = 10 NEXT PRINT ''' RULE #7 ' Draw a line from each FOR to the corresponding NEXT, and make ' sure no lines overlap, as depicted below: ' ' +-- for i = 1 to 10 ' | '+----|--------for j = 1 to 10 '+ | '+ +---next i '+ '+-------next j ' ' Also ugBASIC respects this rule.
Per poter eseguire l'esempio, è necessario disporre dell'emulatore Altirra, e in particolare che l'eseguibile x64sc
sia accessibile.
Digitare quindi il seguente comando:
# Linux ugbc.atari contrib_for_next_bp.bas -o example.xex altirra example.xex # Windows ugbc.atari.exe contrib_for_next_bp.bas -o example.xex altirra example.xex
Per poter eseguire l'esempio, è necessario disporre dell'emulatore Altirra, e in particolare che l'eseguibile x64sc
sia accessibile.
Digitare quindi il seguente comando:
# Linux ugbc.atarixl contrib_for_next_bp.bas -o example.xex altirra example.xex # Windows ugbc.atarixl.exe contrib_for_next_bp.bas -o example.xex altirra example.xex
Per poter eseguire l'esempio, è necessario disporre dell'emulatore VICE, e in particolare che l'eseguibile x64sc
sia accessibile.
Digitare quindi il seguente comando:
# Linux ugbc.c64 contrib_for_next_bp.bas -o example.prg x64sc example.prg # Windows ugbc.c64.exe contrib_for_next_bp.bas -o example.prg x64sc example.prg
Per poter eseguire l'esempio, è necessario disporre dell'emulatore VICE, e in particolare che l'eseguibile x64sc
sia accessibile.
Digitare quindi il seguente comando:
# Linux ugbc.c64reu contrib_for_next_bp.bas -o example.prg x64sc -reu example.prg # Windows ugbc.c64reu.exe contrib_for_next_bp.bas -o example.prg x64sc -reu example.prg
Per poter eseguire l'esempio, è necessario disporre dell'emulatore YAPE, e in particolare che l'eseguibile yape
sia accessibile.
Digitare quindi il seguente comando:
# Linux ugbc.plus4 contrib_for_next_bp.bas -o example.prg yape example.prg # Windows ugbc.plus4.exe contrib_for_next_bp.bas -o example.prg yape example.prg
Per poter eseguire l'esempio, è necessario disporre dell'emulatore VICE, e in particolare che l'eseguibile xplus4
sia accessibile.
Digitare quindi il seguente comando:
# Linux ugbc.plus4 contrib_for_next_bp.bas -o example.prg xplus4 example.prg # Windows ugbc.plus4.exe contrib_for_next_bp.bas -o example.prg xplus4 example.prg
Per poter eseguire l'esempio, è necessario disporre dell'emulatore XROAR, e in particolare che l'eseguibile x64sc
sia accessibile.
Digitare quindi il seguente comando:
# Linux ugbc.d32 contrib_for_next_bp.bas -o example.bin xroar -rompath (percorso ROM) example.bin # Windows ugbc.d32.exe contrib_for_next_bp.bas -o example.bin xroar.exe -rompath (percorso ROM) example.bin
Per poter eseguire l'esempio, è necessario disporre dell'emulatore XROAR, e in particolare che l'eseguibile x64sc
sia accessibile.
Digitare quindi il seguente comando:
# Linux ugbc.d64 contrib_for_next_bp.bas -o example.bin xroar -rompath (percorso ROM) example.bin # Windows ugbc.d64.exe contrib_for_next_bp.bas -o example.bin xroar.exe -rompath (percorso ROM) example.bin
Per poter eseguire l'esempio, è necessario disporre dell'emulatore DCMOTO, e in particolare che l'eseguibile x64sc
sia accessibile.
Digitare quindi i seguenti comandi:
# Linux ugbc.pc128op contrib_for_next_bp.bas -o example.bin dcmoto example.bin (scegliere example.bin) (scegliere BASIC 128) CLEAR,&H2FFF: LOADM"CASS:",R: EXEC # Windows ugbc.pc128op.exe contrib_for_next_bp.bas -o example.bin dcmoto example.bin (scegliere BASIC 128) CLEAR,&H2FFF: LOADM"CASS:",R: EXEC
Per poter eseguire l'esempio, è necessario disporre dell'emulatore DCMOTO, e in particolare che l'eseguibile x64sc
sia accessibile.
Digitare quindi i seguenti comandi:
# Linux ugbc.mo5 contrib_for_next_bp.bas -o example.bin dcmoto example.bin (scegliere example.bin) (scegliere BASIC 128) CLEAR,&H2FFF: LOADM"CASS:",R: EXEC # Windows ugbc.mo5.exe contrib_for_next_bp.bas -o example.bin dcmoto example.bin (scegliere BASIC 128) CLEAR,&H2FFF: LOADM"CASS:",R: EXEC
Per poter eseguire l'esempio, è necessario disporre dell'emulatore XEMU, e in particolare che l'eseguibile xmega65
sia accessibile.
Digitare quindi il seguente comando:
# Linux ugbc.vic20 contrib_for_next_bp.bas -o example.prg xvic --memory 24k example.prg # Windows ugbc.vic20.exe contrib_for_next_bp.bas -o example.prg xvic --memory 24k example.prg
Per poter eseguire l'esempio, è necessario disporre dell'emulatore Speccy, e in particolare che l'eseguibile speccy
sia accessibile.
Digitare quindi il seguente comando:
# Linux ugbc.zx contrib_for_next_bp.bas -o example.tap Speccy example.tap # Windows ugbc.zx.exe contrib_for_next_bp.bas -o example.tap Speccy example.tap
Per compilare e mandare in esecuzione l'esempio, hai bisogno di avere l'emulatore openMsx oppure il BlueMSX, e in particolare che il suo eseguibile sia accessibile.
Dopo di che, digita questo comando sulla linea di comando:
# Linux ugbc.coleco contrib_for_next_bp.bas -o example.rom openmsx -machine \"COL - ColecoVision\" -cart example.rom # Windows ugbc.coleco.exe contrib_for_next_bp.bas -o example.rom bluemsx -machine \"COL - ColecoVision\" example.rom
# Linux ugbc.coleco contrib_for_next_bp.bas -o example.rom bluemsx /machine \"COL - ColecoVision\" /rom1 example.rom # Windows ugbc.coleco.exe contrib_for_next_bp.bas -o example.rom bluemsx /machine \"COL - ColecoVision\" /rom1 example.rom
Per compilare e mandare in esecuzione l'esempio, hai bisogno di avere l'emulatore BlueMSX, e in particolare che il suo eseguibile sia accessibile.
Dopo di che, digita questo comando sulla linea di comando:
# Linux ugbc.sc3000 contrib_for_next_bp.bas -o example.rom bluemsx /machine \"SEGA - SC-3000\" /rom1 example.rom # Windows ugbc.sc3000.exe contrib_for_next_bp.bas -o example.rom bluemsx /machine \"SEGA - SC-3000\" /rom1 example.rom
Per compilare e mandare in esecuzione l'esempio, hai bisogno di avere l'emulatore BlueMSX, e in particolare che il suo eseguibile sia accessibile.
Dopo di che, digita questo comando sulla linea di comando:
# Linux ugbc.sg1000 contrib_for_next_bp.bas -o example.rom bluemsx /machine \"SEGA - SG-1000\" /rom1 example.rom # Windows ugbc.sg1000.exe contrib_for_next_bp.bas -o example.rom bluemsx /machine \"SEGA - SG-1000\" /rom1 example.rom
Se hai trovato un problema nel cercare di eseguire questo esempio, se pensi che ci sia un bug o, più semplicemente, vorresti che fosse migliorato, apri una segnalazione su GitHub per questo specifico esempio. Grazie!