Τρίτη 31 Μαΐου 2016

Αναθεώρηση 23 (έκδοση 8.1)

Στην νέα αναθεώρηση έφτιαξα τις προαιρετικές παραμέτρους (optional). Για άλλα θέματα σχετικά με την αναθεώρηση δείτε στο τέλος του κειμένου.
Στη Μ2000 δεν προκαθορίζουμε στο διερμηνευτή τις παραμέτρους στις Συναρτήσεις και τα Τμήματα. Και στις δυο περιπτώσεις μπαίνουν ότι δώσουμε στο σωρό τιμών και καλείται ανάλογα το τμήμα ή η συνάρτηση. Εκεί είναι ο προγραμματιστής "υπεύθυνος" για το τι θα πάρει και πώς.
Με τον μέχρι χθες διερμηνευτή δεν μπορούσαμε να μην δώσουμε μια ενδιάμεση τιμή, στη τμημάτων-συναρτήσεων. Δεν υπήρχε τρόπος να φανεί ότι δόθηκε "μη τιμή".
Από την αναθεώρηση 23 (έκδοση 8.1) έγινε το εξής. Μπήκε ένα ψεύτικο στοιχείο που λέει "προαιρετικό" ([optional]), για το σωρό τιμών. Επιπλέον μπορούμε στην Διάβασε να χρησιμοποιήσουμε το ? που δηλώνει ότι αν δεν βρει τιμές τότε αν υπάρχουν οι μεταβλητές τις αφήνει ως έχουν αλλιώς τις δημιουργεί με την στάνταρ αρχική τιμή.
Επιπλέον το ? μπορεί να δοθεί και ως τιμή στη κλήση τμημάτων-συναρτήσεων και αυτό βάζει στο σωρό το ψεύτικο στοιχείο [optional]. Αν ζητάμε δείκτη από το σωρό και υπάρχει το [optional] θα πάρουμε λάθος.

Παρακάτω το πρόγραμμα είναι στα αγγλικά, και κάνει τα εξής:

  • Δοκιμάζουμε το alfa με το ? ενώ δεν έχουμε δηλώσει στη Read ότι μπορεί να λείπει κάποια τιμή.  Εδώ αν λείπει τιμή τότε βγαίνει λάθος. Οπότε αν δεν θέλουμε να δώσουμε τιμή, βάζουμε το  ?
  • Στο τμήμα beta ορίσαμε να είναι προαιρετικό το διάβασμα! Εδώ πρέπει να αντιληφθεί ο αναγνώστης ότι τα τμήματα καλούνται με κοινό σωρό τιμών, οπότε αν δεν βάλουμε τιμές στη κλήση του τμήματος, μπορεί να έχει τιμές από πριν ο σωρός, άρα να πάρει τελικά τιμές η beta. Εδώ ξέρουμε ότι δεν έχει  (η flush ή Άδειασε αδειάζει το σωρό τιμών, που είναι μια ειδική στοίβα στη Μ2000). Όπως και να καλέσουμε την beta, θα αφήνει αρχικές τιμές όπου δεν παίρνει τιμές! Το ? λέει στη Διάβασε πως αν είναι κενός ο σωρός τότε να αφήνει ότι τιμές έχουν όσες μεταβλητές υπάρχουν, αλλιώς φτιάχνει νέες με μηδενικές τιμές.
  • Στο delta διαβάζουμε μια τιμή με αναφορά και παίρνουμε ή όχι μια προαιρετική τιμή Χ. Δοκιμάζουμε να περάσουμε το ? ενώ ζητάει αναφορά, και παίρνουμε λάθος στην Try { } (λέγεται Δες { } στα ελληνικά - οι λέξεις που χρησιμοποίησα έχουν σχετικό νόημα για την περίπτωση)
  • Μετά φτιάχνω μια συνάρτηση alfa(), μπορώ να το κάνω ακόμα και αν υπάρχει τμήμα alfa, όπου χρησιμοποιώ στη διάβασε το "?"
  • Αμέσως μετά φτιάχνω μια beta (θα μπορούσα να την κάνω alfa, δηλαδή να αλλάξω τον ορισμό της alfa με νέο ορισμό). Εδώ η Διάβασε δεν έχει το "?". Ενώ πριν κάλεσα τη συνάρτηση με alfa(), χωρίς παράμετρο, εδώ έπρεπε να βάλω το  "?" για να μπορεί ο διερμηνευτής στη Beta να αφήσει την τιμή που είχε η Χ. Το "?" αποτελεί κάτι, άρα δεν βγαίνει λάθος το Read ( η Διάβασε στα Ελληνικά)
(Στη ΓΛΩΣΣΑ του σχολείου η Διάβασε διαβάζει από το πληκτρολόγιο. Το αντίστοιχο στη Μ2000 είναι η Εισαγωγή ή Input)

flush
module alfa {
      let a=1000, b=23
      Read a, b
      Print a, b
}
\\ we say all not optional
\\ but predefined with a default value each
alfa ?, ?
alfa 44, ?

module beta {
      let a=1000, b=23
      \\ we say all optionals
      read ? a, b
      Print a, b
}
Print "beta Test"
beta 1,2
beta
beta ,2
beta 1
\\ we can use ? here
beta ? , ?

Module delta {
        X=-1
       Read ? &name$, X
        if X>0 then name$=name$+", nice day"
}
b$="Hello"
delta &b$
Print b$
b$="Hello"
delta &b$, 1
Print b$
\\ we can't pass predefined or optional for reference
\\ error trapping
try { delta ? }
if error then report error$
Function alfa { X=10 : read ? X : =X**2}
Print alfa(), alfa(2) \\ 100  4
Function beta {X=10: read X : =X**2}
Print alfa(?), alfa(2) \\ 100  4



Νέες Προσθήκες
Διορθώθηκε το σύστημα λήψης γεγονότων από ActiveX ώστε να μη χρειάζεται να έχουμε γενικές μεταβλητές (δείτε στη προηγούμενη ανάρτηση έχω αλλάξει το πρόγραμμα).
Εξ ορισμού σε μια κατάσταση ο τρόπος ταξινόμησης βασίζεται στο κείμενο. Μπορούμε να ορίσουμε Binary ή Database, με κλήση μεθόδου, και περισσότερες πληροφορίες θα δοθούν αργότερα.
Μπήκε νέο σύστημα εύρεσης αντικειμένων τύπου ActiveX.
Προσοχή, δουλεύει μεν, αλλά "Τρώει μνήμη", δηλαδή δεν έχει τελειοποιηθεί ακόμα
Φυσικά μπορούμε να δουλεύουμε χωρίς τα GUID, και χρησιμοποιώντας το internet για να βρούμε τις μεθόδους, και τις ιδιότητες!


\\ to get this GUID we need to perform a LIST LIB TO A
\\ where A is a module (run this in M2000 command line)
\\ not all the objects are creatable
Declare Worksheet "{00020820-0000-0000-C000-000000000046}"
\\ we make an inventory
\\ we can write: Inventory alfa
\\ but param() with an object return an inventory
\\ keys are all names in capitals, and items are the definitions (a simple form)
\\ for properties and functions
alfa=param(Worksheet)
Report Type$(Worksheet) ' Workbook
For i=0 to len(alfa)-1
Report 3, alfa$(i!) ' use index, not key
Next i

\\ we can write here Declare Worksheet Nothing
\\ But at the end all objects (ActiveX) erased



Σε άλλο τμήμα γράφουμε αυτό
\\ report to screen
list lib
\\ report the exe or dll or ocx file
\\ and all CoClasses

\\ menu$() has all the names
For i=1 to menuitems
      Report Menu$(i)
Next i

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

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

You can feel free to write any suggestion, or idea on the subject.