Παρασκευή, 31 Ιουλίου 2015

Χρήση της ΔΙΑΜΕΣΟΥ ή GOSUB στη Μ2000 μέρος Β

Είδαμε στην προηγούμενη ανάρτηση την εντολή Διαμέσου (Gosub) να μεταφέρει την ροή εκτέλεση εντολών "διαμέσου" ρουτινών. Όμως αυτές οι ρουτίνες είναι κάτι παραπάνω από απλά ένα τμήμα εντολών του τμήματος για επαναληπτική εκτέλεση (είδαμε για αναδρομή, για τοπικές μεταβλητές που χάνονται με το πέρας της ρουτίνας).
Η Μ2000 στην 8 έκδοση έβαλε μερικά πράγματα από την παλιά Basic επειδή ο λόγος ύπαρξης της γλώσσας είναι η εκπαίδευση. Έτσι για γνωριμία με την παλιά Basic περιλαμβάνει τις εντολές (εδώ στα αγγλικά):
REM, LET, NEW, PRINT, INPUT, IF THEN, FOR NEXT, CLS, CLEAR, DEF, SUB, GOSUB, GOTO, RETURN, OPEN, CLOSE, WRITE, LINE INPUT, DATA, READ, ON GOTO, ON GOSUB, SAVE, LOAD, LIST
Η Goto είναι η ΠΡΟΣ ενώ η Gosub είναι η ΔΙΑΜΕΣΟΥ
Η εντολή List ή Λίστα δίνει την λίστα μεταβλητών και όχι του προγράμματος. Για να δει κανει το πρόγραμμα πρέπει να γράψει σ ή συγγραφή και το όνομα του τμήματος (μπορεί να φτιάξει κανει το τμήμα RUN και να γράψει RUN και να το τρέξει και φαίνεται ακριβώς όπως στην παλιά Basic).
Επιπλέον η Basic είχε αριθμούς γραμμών. H Μ2000 μπορεί να λειτουργήσει και με αριθμούς γραμμών. Μάλιστα στη συγγραφή αν ξεκινήσουμε με αριθμό μια γραμμή τότε με το Enter έχουμε νέα γραμμή (παράγραφο) με αυτόματη απόδοση επόμενου αριθμού. (έχουμε auto numbering σε εοπεξεργαστή κειμένου...τέλειο).
 Μπορούμε να χρησιμοποιήσουμε το ΔΙΑΜΕΣΟΥ 1000 και ο μεταφραστής ψάχνει από πάνω (αρχή) και όχι από το τέλος όπως στις Ρουτίνες, να βρει τη γραμμή 1000 και συνεχίζει από εκεί μέχρι να βρει το πρώτο Επιστροφή (Return). Η εντολή Επιστροφή έχει δυο πρόσωπα, ένα χωρίς παραμέτρους κάνει επιστροφή από εκτέλεση Διαμέσου, και το άλλο είναι με παραμέτρους και επιστρέφει τιμές σε πεδία σε βάσεις δεδομένων!
Επιπλέον των αριθμών γραμμών υπάρχουν και οι ετικέτες. Οι ετικέτες είναι ονόματα που σηματοδοτούν ένα σημείο του κώδικα. Δεν επιτρέπεται στη γραμμή με ετικέτα να υπάρχει άλλη εντολή εκτός από σημειώσεις (με χρήση \ ή ' ). Μπορούμε  να πάμε προς μια ετικέτα ή να εκτελέσουμε διαμέσου μιας ετικέτας. 

Ενώ στις ρουτίνες δεν βάζαμε πριν την πρώτη κάποια εντολή έξοδος γιατί η ίδια η εντολή Ρουτινα αν βρεθεί, στη ροή, για εκτέλεση κάνει έξοδο από το τμήμα, για τις ρουτίνες με ετικέτα πρέπει να έχουμε κάτι πιο πριν για να κόψουμε την συνεχεια στη ρουτίνα (αν πάμε στο Επιστροφή και δεν υπάρχει κάτι στο σωρό επιστροφής-στον οποίο δεν έχουμε πρόσβαση- τότε θα βγει λάθος!
Σε παλαιότερες εκδόσεις δεν μπορούσε ο μεταφραστής να κάνει άλματα έξω από ένα μπλοκ εντολών. Στην έκδοση 8, κάνουμε παπάδες όπως λέμε...
Η προφανέστερη διαφορά με τις ρουτίνες στο μέρος Α που είδαμε είναι ότι δεν έχουμε παραμέτρους και η δεύτερη είναι ότι κάθε πράγμα που φτιάχνουμε...παραμένει στο τμήμα. Δεν έχουμε τίποτα τοπικό! Μπορούμε να χρησιμοποιήσουμε την εντολή Τοπική αλλά με την επιστροφή δεν θα γυρίσουμε στην προυπάρχουσα..(άρα δεν κερδίζουμε κάτι). Αν θέλουμε να έχουμε όμως κάτι σαν την Ρουτίνα Τέλος ρουτίνας τότε ή χρησιμοποιούμε την Ρουτίνα Τέλος ρουτίνας, ή αν θέλουμε τίποτα άλλο μυστήριο τότε υπάρχει το Για Αυτό { } το οποίο ότι νέο έχουμε στο μπλοκ θα εξαφανιστεί στο πέρας του (είναι το ανάλογο του Σωρός Νέος {} για την προσωρινή χρήση ενός καθαρού σωρού).

Για Ι=1 Εως 100 {
      Διαμεσου ετικετα
      Διαμέσου 1000
}
έξοδος


1000 Τύπωσε Ι**2 : Επιστροφή
ετικετα:
      Τύπωσε Ι
      επιστροφή

Δεν υπάρχουν σχόλια:

Δημοσίευση σχολίου