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

Έκδοση 8.5

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

Παραδείγματα

Group alpha {
      Property Multi {
            value (index) {
                  Multi++
                  value=Multi
            }
            set (index) {
                  value*=index
            }
       }=100
      Module Look {
            Print .[Multi]
            }      
}


Print alpha.Multi(3), alpha.Multi(2)
alpha.Multi(23)=10
alpha.Look
Print alpha.Multi(2), alpha.Multi(2)


Παράδειγμα με χρήση αντικειμένων σε πίνακα
Group alpha {
      Property Multi {
            value (Index) {
                  Multi++
            }
            set (index) {
                  value*=index
            }
       }=100


}
dim a(10)=alpha
Print a(1).Multi(3), a(1).Multi(2)
a(1).Multi(3)=10
Print a(1).Multi(3), a(1).Multi(2)


Παράδειγμα με ιδιότητα αλφαριθμητική

Group alpha {
      Property Multi$ {
            value (index) {
                  \ value$ is for output
                  value$=value$+Mid$("GoodMorning", index)
            }
            set (index) {
                  \ value$ is for input
                  Print value$, Multi$ \\ value has same variables too.
                  value$=Mid$(value$+Multi$,index)
                  Print value$
            }
       }="Hello"


}


Print alpha.Multi$(3), alpha.Multi$(2)
alpha.Multi$(3)="Hello There"
Print alpha.Multi$(3), alpha.Multi$(2)


Και με πίνακες, εδώ και με Κατάσταση (Inventory)

Group alpha {
      Property Multi$ {
            value (index) {
                  value$=Mid$(value$, index)
            }
            set (index) {
                  value$=value$+Mid$("............", index)
            }
       }="Hello"


}
Dim a(10)=alpha
Print a(1).Multi$(3), a(2).Multi$(2)
a(1).Multi$(3)="Ok"
Print a(1).Multi$(1)
Inventory Beta=10:=Alpha
Print Beta(10).Multi$(3)
Beta(10).Multi$(3)="Ok"
Print Beta(10).Multi$(1)



Πριν φτιάξω τα παραπάνω, ετοίμασα και αυτά:
Σε πίνακα αριθμών μπορούμε να βάλουμε αντικείμενα που επιστρέφουν τιμές (στις προηγούμενες εκδόσεις θα έπρεπε να πέρναμε μια ιδιότητα, μια μεταβλητή, ή διαφορετικά όλο το αντικείμενο. Τώρα το αντικείμενο δεν φαίνεται ως αντικείμενο, αλλά μια αριθμητική τιμή. Μπορούμε να το δούμε με την Τύπος$(). Δουλεύουν είτε βάλουμε στο πίνακα κοινή ομάδα είτε έχουμε ξεχωριστές. (στο επόμενο παράδειγμα βάζουμε σε όλο το πίνακα με χρήση της Group$() η οποία παραβλέπει την τιμή που γυρίζει η ομάδα και δίνει ένα αντίγραφό της (όπως και η Group() παίρνουν το "αυθεντικό" αντικείμενο χωρίς το $.

group alfa {
      x=100
      value {=.x}
      set { read .x}
}
alfa=500
Print alfa


Dim a(10)
a(0)=group(alfa)
Print a(0)
a(0)=2000
Print a(0)




Σε πίνακα αλφαριθμητικών μπορούμε να βάλουμε αντικείμενα που επιστρέφουν τιμές
group alfa$ {
      x$="ok"
      value {=.x$}
      set { read .x$}
}
alfa$="Yes"
Print alfa$


Dim a$(10)=group$(alfa)


Print a$(0)


a$(0)="12345"
Print a$(0)



Τελευταίο παράδειγμα: Βάζουμε στο πίνακα όχι απλά ένα αντικείμενο ως μια τιμή αλλά έχει και δείκτες. Η εντολή Ιδιότητα είναι μακροεντολή εσωτερικά στο κώδικα που στηρίζεται σε αυτό που δείχνει το παράδειγμα. Οι value και οι Set εδώ είναι απ΄ευθείας στην ομάδα και όχι όπως πριν που ήταν μέλη της "κατασκευής" της ιδιότητας. Εδώ δεν υπάρχουν προρυθμισμένες μεταβλητές. Ότι χρειαζόμαστε το φτιάχνουμε, στην πράξη είναι συναρτήσεις, και βλέπουν ότι μεταβλητές και ότι άλλο έχει η ομάδα όπου ανήκουν.

group alfa {
      X=10
      Value (a$, k) {
            =.X
      }
      Set (a$, n) {
            .X<=val(a$)*number+n
      }
}
alfa("5",2)=10
Τύπωσε alfa("ok", 1)
Dim A(10)=group(alfa)
Print A(3)("ok",1)