Κυριακή, 14 Φεβρουαρίου 2016

Εγχειρίδιο της Μ2000 - Τεύχος 2ο

Πρόγραμμα ΓΕΙΑ ΣΟΥ ΚΟΣΜΕ

Σε όλες τις γλώσσες βλέπουμε το Hello World πως φτιάχνεται!
Εδώ θα δούμε στη Μ2000 διάφορους τρόπους χωρίς χρήση μεταβλητής

Παρατηρήσεις:

Σχετικά με τα παραδείγματα πιο κάτω:

1. Το σύμβολο ":" σημαίνει "επόμενη εντολή"

2.Όταν ένα αναγνωριστικό είναι στην αρχή της γραμμής και έχει το σύμβολο ":" στο τέλος τότε αυτό λέγεται ετικέτα.

3.Οι ετικέτες ξεχωρίζουν πεζά-κεφαλαία-τόνους. Τα τμήματα, οι συναρτήσεις, οι μεταβλητές, οι πίνακες και οι ομάδες δεν ξεχωρίζουν πεζά-κεφαλαία-τόνους. Το ίδιο ισχύει και για τις εντολές. Από την έκδοση 8 και οι ρουτίνες μπορούν να κληθούν με ονόματα που έχουν διαφορά στα πεζά-κεφαλαία αλλά όχι στους τόνους.

4.Η ομάδα είναι αντικείμενο.

5. Η ανώνυμη συνάρτηση είναι ένα αλφαριθμητικό με αγκύλες εσωτερικά.Στο παράδειγμα 5 γυρνάει ένα στοιχείο. Τα αλφαριθμητικά γράφονται με εισαγωγικά ή με αγκύλες. Με αγκύλες γράφονται και τα μπλοκ κώδικα. Ο διορθωτής αναγνωρίζει ποιες αγκύλες είναι κώδικας και ποιες αλφαριθμητικό, από τη θέση τους στο κώδικα, και αυτό το κάνει άμεσα με το που γράφουμε τη γραμμή. Στην γραμμή εντολών της Μ2000 δεν χρωματίζονται οι εντολές αλλά αν δώσουμε Σ και enter θα ανοίξει ο διορθωτής με όλες τις εντολές που έχουμε δώσει σε κάθε γραμμή, και αυτές θα είναι χρωματισμένες. Μπορούμε να τις διορθώσουμε, ή να προσθέσουμε γραμμές και μετά με Esc γυρνάμε στη γραμμή εντολών και με βελάκια άνω και κάτω επιλέγουμε από τα ήδη αποθηκευμένα. Η γραμμή εντολών τρέχει υποσύνολο εντολών της Μ2000. Δεν εκτελεί επαναλήψεις.

6. Όταν η συνάρτηση είναι τύπου αλφαριθμητικού τότε έχει στο όνομα το δολάριο "$", εκτός από αλφαριθμητικό μπορεί να επιστρέφει και αντικείμενο. Όταν είναι ακέραιου αποτελέσματος τότε έχει το σύμβολο "%". Χωρίς σύμβολο γυρνάει αριθμό, ή το 0 και ένα αντικείμενο! Μετά το = στη επιστροφή σε μια συνάρτηση αν βάλουμε κόμμα και προσθέσουμε αποτελέσματα τότε δεν γυρνάει μια τιμή αλλά έναν πίνακα με τιμές. (θα το δούμε πιο κάτω).

7. Τα τμήματα και οι συναρτήσεις δεν δηλώνουν τα ορίσματα (αν και μπορούμε να το κάνουμε με μια λίστα ορισμάτων σε παρενθέσεις δίπλα από το όνομα με διάστημα να την ξεχωρίζει από το όνομα, ή να μην ξεχωρίζει, ισχύει από την 9.0 αναθ. 45). Η λίστα ορισμάτων γίνεται μια εντολή Διάβασε αυτόματα από τον διερμηνευτή. Μπορούμε να μην δώσουμε τη λίστα, να μην βάλουμε παρενθέσεις, στον ορισμό και απλά να βάλουμε τη Διάβασε, μία ή περισσότερες στο κώδικα του τμήματος ή της συνάρτησης. Ο διερμηνευτής δεν ελέγχει τον αριθμό και το είδος στη κλήση (στην γραμμή που καλούμε), αλλά ο έλεγχος γίνεται στη Διάβασε, στο κώδικα του τμήματος/συνάρτησης που αν κάτι δεν είναι όπως πρέπει βγαίνει λάθος.

8. Οι ρουτίνες (τύπου Ρουτίνα/Τέλος Ρουτίνας) μπορούν να ορίσουν παραμέτρους μέσα στις παρενθέσεις, ή όχι, αλλά χρειάζονται τις παρενθέσεις ακόμα και χωρίς παραμέτρους. Αν αποφασίσουμε να έχουμε πίνακα με το ίδιο όνομα τότε θα πρέπει να δώσουμε το Διαμέσου στην αρχή, για να καλέσουμε την ρουτίνα. Οι ρουτίνες έχουν θέαση των μεταβλητών του τμήματος ή συνάρτησης που ανήκουν. Στα τμήματα και τις συναρτήσεις η θέαση περιορίζεται στο σώμα του ορισμού τους και σε ότι είναι γενικό (ή καθολικά αναγνωριστικά), εκτός από την περίπτωση κλήση συνάρτησης προς τα πίσω, που εξηγείται στο εγχειρίδιο και έχει δυνατότητα να βλέπει αναγνωριστικά εκεί που ορίστηκε η συνάρτηση (αυτές τις καλούμε από γεγονός, και είναι ο τρόπος να περάσουμε κώδικα ενός τμήματος σε ένα γεγονός).

9. Το παράδειγμα 9 προστέθηκε από την αναθεώρηση 175 και μετά, και κάνει χρήση Γεγονότος.

10. Παράδειγμα με παράθυρο.

11. (απλά δεν είχε μπει, έπαιζε από την 1η έκδοση της γλώσσας)

12-14. Νέες προσθήκες για την έκδοση 8
15 Προσθήκη αντικείμενου Σωρός από την 8.5

Πως τρέχουμε το πρόγραμμα του παραδείγματος;

Η Μ2000 έχει μια λίστα στη μνήμη και ένα κατάλογο στο δίσκο για να βάζει τα αρχεία της. Όταν θέλουμε να γράψουμε ένα πρόγραμμα διαλέγουμε αν θα το γράψουμε στο δίσκο ή στη μνήμη, αλλά για να το τρέξουμε σίγουρα πρέπει να το φορτώσουμε στην μνήμη αν είναι στο δίσκο. Ας δούμε τις δυο περιπτώσεις:

Ξεκινάμε τη Μ2000, το πρόγραμμα m2000.exe. Δείτε για την εγκατάσταση εδώ
(από την έκδοση 8.2 αντί για ένα αρχείο exe, έχουμε ένα μικρό exe και ένα dll και έγινε αυτό γιατί η γλώσσα μπορεί να ανοιχτεί ως αντικείμενο από άλλες γλώσσες, και να εκτελεί εντολές)

Μπορούμε να ξεκινήσουμε τη γλώσσα όσες φορές θέλουμε, δεν υπάρχει περιορισμός. Ένα πρόγραμμα gsb της Μ2000 μπορεί να κληθεί με διπλό κλικ από φάκελο (αρκεί να δηλωθεί ότι θα ανοίγει με τη Μ2000). Χρειάζεται όμως μια "προεργασία", δηλαδή να ακολουθεί μετά τα τμήματα/συναρτήσεις εντολή που να καλεί ένα τμήμα τουλάχιστον και μια εντολή Τέλος. Επίσης αν δεν κάνουμε εισαγωγή από τη κονσόλα απαιτείται μια εντολή Άναψε για να ανοίξει η κονσόλα, άρα και η οθόνη, διαφορετικά μπορούμε να δουλεύουμε με το γραφικό περιβάλλον που μπορεί να φτιάξει ο χρήστης με εντολές της Μ2000).
Περί του διορθωτή της Μ2000

Με εξωτερικό αρχείο:
Σ "προγραμμα1.gsb"
Το Σ είναι συντόμευση της εντολής Συγγραφή που ανοίγει το διορθωτή, αγγλικά είναι το Edit
Το Σ μόνο του - χωρίς  όρισμα- ανοίγει τη λίστα με ότι εντολές έχουμε δώσει στη κονσόλα, με χρωματισμό. Μπορούμε να προσθέσουμε ή να τροποποιήσουμε τις εντολές και με Esc γυρνάμε στη γραμμή εντολών και με βελάκια άνω ή κάτω επιλέγουμε εντολή

Ανοίγει ο διορθωτής και γράφουμε
Τμήμα Α {
Όταν πατήσουμε το { θα μπει και το } και πατάμε enter, αλλά καλύτερα είναι αντί να πατήσουμε την αγκύλη να δώσουμε το SHIFT+ENTER το οποίο αυτόματα θα δώσει αυτό (με | φαίνεται ο δρομέας):

Τμήμα Α {
      |
}

μετά  αντιγράφουμε το παρακάτω από το "\\ Παράδειγμα" και μια γραμμή από κάτω κλείνουμε την αγκύλη που ανοίξαμε, και με Esc γυρνάμε στη γραμμή εντολών. Αν έχουμε ελληνικά ως προεπιλογή τότε με Ctrl + F μας εμφανίζει το ΦΟΡΤΩΣΕ ενώ έχουμε το Ctrl + L  για το LOAD αν έχουμε επιλέξει τα Λατινικά (έτσι το εμφανίζω, έχει σχέση με τις πρώτες εκδόσεις της Μ2000  για τα γράμματα, αλλά επιλέγει εδώ και τα μηνύματα στα Αγγλικά - λατινικοί χαρακτήρες).
ΦΟΡΤΩΣΕ προγραμμα1
Τώρα το πρόγραμμα φορτώθηκε στο τμήμα Α, το ελέγχουμε με την εντολή Τμήματα, ή μόνο για τα φορτωμένα τμήματα με την εντολή Τμήματα ?
Αν θέλουμε να σώσουμε με το ίδιο όνομα τότε με Ctrl + A μας γράφει SAVE COMMAND$ και μας ρωτάει αν θέλουμε να αντικαταστήσουμε το αρχείο. Και να το αντικαταστήσουμε φτιάχνει backup, το αμέσως προηγούμενο.
Μπορούμε να σώσουμε με άλλο όνομα!

Απ' ευθείας γράφοντας στην λίστα τμημάτων-συναρτήσεων:

Σ Α
(Σ Α ΩΣ ΑΑ κάνει μετανομασία του Α ως ΑΑ ενώ η εντολή ΔΙΑΓΡΑΦΗ σβήνει το τελευταίο που ορίσαμε)
(Σ Α( ορίζει συνάρτηση, όπως και το Σ Α%( και το Σ Α$( - δέχεται και τα Σ Α() ή Σ Α%() ή Σ Α$() δηλαδή με κλείσιμο της παρένθεσης - χωρίς να δηλώσουμε ορίσματα- αυτό το κάνουμε με μια Διάβασε ως πρώτη γραμμή και ακολουθεί η λίστα ορισμάτων π.χ σε μια Σ Α() γράφουμε πρώτη γραμμή Διάβασε Χ, Υ και αυτό σημαίνει ότι θα δώσουμε  Τύπωσε Α(10,20)  και τα 10 και 20 θα πάνε στα Χ και Υ)
(Οι συναρτήσεις επιστρέφουν τιμή  (αν θέλουμε) με το = (δεν βάζουμε κάτι αριστερά από το =), και αυτό δεν κάνει αυτόματη έξοδο, μπορούν να ακολουθούν άλλες εντολές. Αυτό έχει νόημα στη Μ2000 γιατί συναρτήσεις μπορούν να έχουν και οι ομάδες και να δώσουμε κάτι για επιστροφή της συνάρτησης από την ομάδα και να του αλλάξουμε τιμή πριν επιστρέψουμε από την συνάρτηση)

Αντιγράφουμε το πρόγραμμα και πατάμε Esc
Σώσε προγραμμα1
Και τώρα αν κάνουμε αλλαγές (μπαίνουμε με Σ Α και βγαίνουμε με Esc) με το Ctrl+A σώνουμε άμεσα. Δεν σώνεται μόνο το Α, αν υπάρχουν άλλα τμήματα/συναρτήσεις σώνονται μαζί.

Τρόπος καθαρισμού από προηγούμενες αλλαγές

Καμία φορά θέλουμε να φέρουμε τη κατάσταση όπως ήταν η αρχική. Μια απλή εντολή, για την γραμμή εντολών είναι αυτή:
Αρχή
(αν βάλουμε την εντολή ΑΡΧΗ στο πρόγραμμα, τότε το πρόγραμμα θα διαγραφεί από την λίστα, ενώ θα τρέχει στο αντικείμενο εκτέλεσης, όπου "καταναλώνεται" ο κώδικάς του, το δε πρόγραμμα στη λίστα το χρειάζεται αν θέλει να βρει μια ρουτίνα, ή να κάνει ένα άλμα με τη ΠΡΟΣ, διότι ψάχνει σε αυτό και όχι στο "καταναλωμένο". Για τις επαναλήψεις δεν έχει θέμα ο διερμηνευτής γιατί κρατάει αντίγραφο του μπλοκ που εκτελεί, και το φορτώνει ξανά αν χρειάζεται το μπλοκ...να επαναληφθεί).
Επιμέρους καθαρισμούς κάνουμε με τρεις εντολές: ΝΕΟ, ΚΑΘΑΡΟ, ΑΔΕΙΑΣΕ
Το ΝΕΟ διαγράφει τη λίστα και τυχόν στατικές που είχαν πάρει τιμές.
Η ΚΑΘΑΡΟ διαγράφει μεταβλητές/πίνακες (και τις στατικές μεταβλητές, που αλλιώς διατηρούνται με την έξοδο από το τμήμα/συνάρτηση)
Η ΑΔΕΙΑΣΕ διαγράφει το σωρό τιμών (που παρέχουμε στα τμήματα, με τιμές, και ενδέχεται ένα τμήμα να τις επεξεργαστεί και να τις αλλάξει).
Βλέπουμε τι τμήματα/συναρτήσεις έχουμε με την Τμήματα ?  (δεν δείχνει τι τμήματα ή συναρτήσεις ορίζουν τα τμήματα/συναρτήσεις, αλλά αν χρησιμοποιηθεί μέσα σε ένα τμήμα, μας δείχνει τι γνωρίζει εκείνη τη στιγμή ο διερμηνευτής). Με Διαγραφή σβήνουμε το τελευταίο που μπήκε στα τμήματα, ενώ η Νέο σβήνει όλα τμήματα.
Βλέπουμε τι μεταβλητές/πίνακες έχουμε έχουμε με την Λίστα.
Α=100 : Λίστα : Καθαρό : Λίστα
Βλέπουμε τι έχουμε στο σωρό τιμών με την Σωρός. 
Βάλε 1,2,3 : Σωρός : Άδειασε : Σωρός



\\ Παραδείγμα του προγράμματος Γειά Σου Κόσμε
\\ Χωρίς τη χρήση μεταβλητής, απλά εμφανίζει το "Γειά Σου Κόσμε"
\\ 1. Με τμήμα
Τμήμα Γειά_Σου_Κόσμε {
            Τύπωσε "Γειά Σου Κόσμε"
      } : Γειά_Σου_Κόσμε

\\ 2. Με συνάρτηση
Συνάρτηση Γειά_Σου_Κόσμε$ {
            ="Γειά Σου Κόσμε"
      } : Τύπωσε Γειά_Σου_Κόσμε$()

\\ 3. Με ομάδα και κλήση τμήματος
Ομάδα Γειά_Σου_Κόσμε {
            Τμήμα Τύπωσε { Τύπωσε "Γειά Σου Κόσμε" }
      } : Γειά_Σου_Κόσμε.Τύπωσε

\\ ..........προσθέτουμε τη συνάρτηση στην ίδια ομάδα
\\ 4. Με ομάδα και κλήση συνάρτησης
Ομάδα Γειά_Σου_Κόσμε {
            Συνάρτηση Τύπωσε$ { = "Γειά Σου Κόσμε" }
      } : Τύπωσε Γειά_Σου_Κόσμε.Τύπωσε$()

\\ 5. Με ανώνυμη συνάρτηση
Τύπωσε Συνάρτηση$({{="Γειά Σου Κόσμε"}})


\\ 6. Απευθείας
\\ ...και οι αγκύλες κάνουν αντί εισαγωγικών {Γειά Σου Κόσμε}
Τύπωσε "Γειά Σου Κόσμε"   


\\ 7. Με ρουτίνα

Γειά_Σου_Κόσμε() \\ και με Διαμέσου Γειά_Σου_Κόσμε()
\\ Από τη γραμμή εντολών κάνει τερματισμό του διερμηνευτή
Τέλος
\\ Αν βρει το Ρουτίνα ο επεξεργαστής κάνει έξοδο από το τμήμα
Ρουτίνα Γειά_Σου_Κόσμε()
      Τύπωσε "Γειά Σου Κόσμε"
Τέλος Ρουτίνας


\\ 8. Με κλήση διαμέσου κώδικα βάσει ετικέτας

Διαμέσου Γειά_Σου_Κόσμε
\\ Η εντολή Τέλος κάνει έξοδο από το τμήμα
\\ Από τη γραμμή εντολών κάνει τερματισμό του διερμηνευτή

Τέλος
Γειά_Σου_Κόσμε:
      Τύπωσε "Γειά Σου Κόσμε"
Επιστροφή


Γειά_Σου_Κόσμε:
      Τύπωσε "Γειά Σου Κόσμε"
Επιστροφή


\\ 9. Με κλήση γεγονότος
Γεγονός Α {
      Συνάρτηση {
            Τύπωσε "Γειά Σου Κόσμε"
      }
}
Κάλεσε Γεγονός Α


\\ 10.  Με φόρμα που μεγαλώνει! (από τη κάτω δεξιά γωνία)
Όρισε η_Φόρμα_μου Φόρμα
Με η_Φόρμα_μου, "Title", "Γειά σου Κόσμε", "Sizable", Αληθές
Μέθοδος η_Φόρμα_μου, "Show"
α$=Κομ$
Όρισε η_Φόρμα_μου Τίποτα


ή με Modal τύπου παράθυρο, δείτε στη μέθοδο "Show" υπάρχει προεραιτικά παράμετρος που αν είναι μη μηδενική δηλώνει ότι θα είναι modal τύπου (ανοίγει και δεν επιτρέπει να πάει η εστίαση σε κάτι που ήδη ήταν ανοιχτό,το κλειδώνει με μια έννοια - μπορούμε να έχουμε πολλαπλά modal παράθυρα, και κάθε φορά θα κλειδώνουν τα προηγούμενα, και κάθε φορά που θα κλείνει το modal παράθυρο θα ξεκλειδώνει μέχρι το προηγούμενο modal, ή αν δεν υπάρχει θα ξεκλειδώνουν όλα)

Όρισε η_Φόρμα_μου Φόρμα
Με η_Φόρμα_μου, "Title", "Γειά σου Κόσμε", "Sizable", Αληθές
Μέθοδος η_Φόρμα_μου, "Show", 1
Όρισε η_Φόρμα_μου Τίποτα



\\ 11. Με ένα παράθυρο μηνύματος
Α=Ρώτα("Γειά σου Κόσμε")

αυτο είναι το message box της Μ2000 το οποίο μπορεί να μεγεθυνθεί - και παράλληλα θυμάται το μέγεθος μέχρι το τέλος της χρήσης του διερμηνευτή ή μέχρι να το αλλάξουμε ξανά, και ισχύει η αλλαγή για όλες τις φόρμες διαλόγου - εκτός τις φόρμας ιδιοτήτων εκτυπωτή που δεν είναι φόρμα της Μ2000.

\\ 12. Χρήση Λάμδα Συνάρτησης
Πίνακας α$(10)
α$(3)=λάμδα$ (τι$) ->{
            ="Γειά σου "+τι$
            }
Τύπωσε α$(3)("Κόσμε")







Οι λάμδα συναρτήσεις είναι δυο ειδών οι Λάμδα και οι Λάμδα$ ανάλογα αν χρησιμοποιούνται σε μεταβλητές αριθμητικές ή αλφαριθμητικές - άρα ανάλογα με το τι επιστρέφουν.

\\ 13. Aπό Κατάσταση Ειδών
Κατάσταση αλφα = "γεια":="Γειά σου Κόσμε"
Τύπωσε άλφα$("γεια")

Οι καταστάσεις έχουν και το όνομά τους με $ και χωρίς, ανάλογα τι θέλουμε να πάρουμε από το στοιχείο. Αν είχαμε στο στοιχείο "γεια" αριθμό η Αλφα$("γεια") θα έδινε τον αριθμό ως αλφαριθμητικό.
Εδώ η κατάσταση έχει ένα μόνο στοιχείο (Τύπωσε Μήκος(αλφα) θα δώσει το 1). Προσθέτουμε και αφαιρούμε κατά βούληση. Τα κλειδιά είναι μοναδικά εκτός της παραλλαγής Κατάσταση Ουρά, όπου εκεί μπορούμε να διαγράφουμε μόνο από το τέλος (βάζουμε στο τέλος και διαγράφουμε από εκεί),

\\ 14. Aπό τη μνήμη
Διάρθρωση αλφα ως ψηφίο* 100
Επιστροφή άλφα, 20:="
Γειά σου Κόσμε"
Τύπωσε Έκφρ$(άλφα, 20,28)


 \\ 15.  Χρήση του αντικειμένου Σωρός
Άλφα=Σωρός
Σωρός Άλφα {
      Βάλε "Γειά σου Κόσμε"
}
\\ χρήση της λίστας ορισμάτων (Μ) ισοδύναμο με μια Διάβασε Μ σαν πρώτη γραμμή
Τμήμα Κάτι (Μ){
      Σωρός Μ {
            Διάβασε Τι$  \\ το αφαιρεί από το Μ
            Τύπωσε Τι$
      }
}
Τύπωσε Μήκος(Άλφα) \\ 1 στοιχείο
\\ Το αντικείμενο σωρός περνάει πάντα ως αναφορά
\\ εδώ φαίνεται ότι παιρνάει σαν τιμή, αλλά θα είναι με αναφορά
Κάτι Άλφα
Τύπωσε Μήκος(Άλφα) \\ 0 - Καταναλώθηκε ένα στοιχείο


Το αντικείμενο Σωρός είναι ίδιου τύπου με το σωρό τιμών του τμήματος αλλά εδώ είναι ξεχωριστός σωρός. Η εντολή Σωρός όνομα_σωρού { } βάζει πρόσκαιρα στο μπλοκ εντολών ως σωρό τιμών του τμήματος τον σωρό από την μεταβλητή και στην επιστροφή επαναφέρει το σωρό του τμήματος. Τυχόν νήματα που τρέχουν παράλληλα στο τμήμα έχουν δικό τους σωρό τιμών και δεν "αγγίζουν" το σωρό του τμήματος.


Χρήση του Info.GSB



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

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