Τετάρτη 15 Μαρτίου 2017

Αναθεώρηση 7 (Έκδοση 8.4)

Ένα γενικό συμμάζεμα, αρκετές διορθώσεις, έλεγχος με πολλά προγράμματα δοκιμών. Βρήκα ένα πολύ παλιό Bug, όταν σε δυο γραμμές η μία τερμάτιζε σε άνω και κάτω τελεία και η επόμενη ήταν ετικέτα (που και αυτή τερματίζει σε άνω και κάτω τελεία.
Επίσης έκανα μόνο σε ορισμένες εντολές να ισχύουν ονόματα όπως αυτό C:\Windows\ δηλαδή να δέχονται χωρίς εισαγωγικά (αλλά και χωρίς διαστήματα ανάμεσα), τα γνωστά μονοπάτια (paths)

Γενική Ομάδα Βήτα {
      Αξία {
            Στατική Α=1
            =Α
            Α++
      }
}
Για κ=1 έως 30 {
      Τύπωσε Βήτα,
}
Τύπωσε

Τμήμα Εσωτερικό {
      Για κ=1 έως 30 {
            Τύπωσε Βήτα,
      }
      Τύπωσε
}
Εσωτερικό

Στο παράδειγμα η στατική διαφέρει στο Εσωτερικό Τμήμα από το Εξωτερικό. Κάθε τμήμα έχει δικό του αντικείμενο εκτέλεσης και οι στατικές σχετίζονται με τα αντικείμενα εκτέλεσης (βοηθάει αυτό σε νήματα, και τα νήματα έχουν δικό τους αντικείμενο εκτέλεσης, οπότε μια γενική σε άλλο νήμα θα έχει άλλες στατικές). Εδώ στο παράδειγμα την στατική Α την έχουμε στην συνάρτηση Αξία (αυτό που γυρίζει η Βήτα. Για να επιστρέψουμε την ομάδα και όχι την τιμή θα χρησιμοποιήσουμε την συνάρτηση Ομάδα(), εδώ Ομάδα(Βήτα).


Το παρακάτω παράδειγμα δείχνει μια προσθήκη που μπήκε στην αναθεώρηση 7, στο For {} έχουμε τη λίστα1 (Κατάσταση) η οποία στο κλειδί code1 έχει έναν πίνακα. Μπορούμε λοιπόν από την 7 να ανοίγουμε το πίνακα που είναι στην κατάσταση. Δουλεύει και με πολλαπλά αντικείμενα πίνακες και καταστάσεις.

Το αντικείμενο Something, έχει μια ιδιότητα Name$. Όταν πάρει τιμή υπολογίζει το μήκος και την λέξη με μικρά γράμματα και τα τοποθετεί σε ιδιότητες εντός της, μόνο για ανάγνωση. 'Εχω προσθέσει και δυο συναρτήσεις οι οποίες υπολογίζουν κατά την ζήτηση. Η Double$ διαβάζει απευθείας την μεταβλητή πίσω από την ιδιότητα (η εντολή Property είναι μακροεντολή και δημιουργεί αυτή τη μεταβλητή), η οποία βρίσκεται στη γονική ομάδα. Τα [Len] και [Lcase]$ βρίσκονται στην ομάδα Name, αυτή που φτιάχνει η μακροεντολή (φτιάχνει και μια αναφορά στην ομάδα με όνομα Name$, για να μπορούμε να τη χρησιμοποιούμε ως αλφαριθμητικό. Η Tag$() συνδέεται με την ιδιότητα ως αντικείμενο. Η λέξη Name χρωματίζεται από τη Μ2000 επειδή υπάρχει ως εντολή (η εντολή κάνει αλλαγή ονόματος σε αρχεία).


Group Something {
      Property Name$ {
            Value {}
            Set {
                  print value$
                 .[Len]<=Len(value$)
                 .[Lcase]$<=Lcase$(value$)
            }
      } = ""
      Group Name {
           Property Len {value}=0
           Property Lcase$ {value}
           Function Double$ {
                 Link parent [Name]$ to Name$
                 =Name$+Name$
           }
           Function Tag$ {
                 Read what$
                 Link parent Name to Name
                 =format$("<{0}>{1}</{0}>", what$, Name.lcase$)
           }
      }

}
Something.Name$="Hello There"
For Something.Name {
      Print .Len
      Print .Lcase$
      Print .Double$()
      Print .Tag$("b")
}
Dim A(100)=Something
Print A(33).Name.Len
A(33).Name$="George"
Print A(33).Name.Len
A(45).Name$="Bob"
Print A(45).Name.Len
Inventory List1="code1":=A()
For List1("code1")(45) { Print .Name$}
For List1("code1")(33) { Print .Name.Tag$("t")}
List1("code1")(2).Name$="HERCULES"
For List1("code1")(2) {
      Print .Name$, .Name.Lcase$, .Name.Double$(), .Name.Tag$("h3")
}









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

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

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