Άδειασε \\ αδειάζει ο σωρός τιμών
Σειρά 1,2,3,4,5,6 \\ μπαίνουν στο τέλος, οπότε θα βγει το 1 πρώτο
Πάνω 3,3
Σωρός \\ δείχνει το σωρό με 1 2 3 1 2 3 4 5 6
Αν θέλω να βγάλω την κορυφή 10 φορές τότε Πάνω 1, 10
Στο επόμενο τεύχος του εγχειριδίου θα γίνει αναφορά στο σωρό τιμών και στις δυνατότητες που παρέχει στη γλώσσα.
Κύρια προσθήκη στην αναθεώρηση αυτή είναι το αντικείμενο Γεγονός. Βασίζεται στην ιδέα του προγράμματος παραδείγματος στην με το αντικείμενο TheEvent. Όμως δεν είναι ίδιο. Το σύστημα δουλεύει για την επικοινωνία των αντικειμένων με γεγονότα, και σε αυτό όντως έχουμε το ίδιο πράγμα. Επιπλέον όμως μπορούμε αν πετάμε ή να βάζουμε νέες συνδρομές (subscriptions) και επίσης μπορούμε να βάλουμε μια ή περισσότερες συνδρομές "ανώνυμες" που δεν μπορούμε να πετάξουμε.
Διάβασε Χ
Συνάρτηση {
Τύπωσε Χ**2, " οκ"
}
}
Συνάρτηση Β {
Διάβασε Κ
Τύπωσε Κ
}
Συνάρτηση Γ {
Διάβασε Κ
Τύπωσε Κ*10
}
Γεγονός Α νέο Β(), Γ()
\\ καλεί τις δυο συναρτήσεις χωρίς να περιμένει αποτέλεσμα
Κάλεσε Γεγονός Α, 20
\\ τυπώνει 20 και 200
Γεγονός Α πέτα Β()
Κάλεσε Γεγονός Α, 20
\\ τυπώνει 200
Γεγονός Α Κράτησε
Κάλεσε Γεγονός Α, 20
\\ δεν κάνει τίποτα
Γεγονός Α Άφησε
Βάλε 20
Κάλεσε Γεγονός Α
\\ τυπώνει 200
\\ η κάλεσε δίνει πρόσβαση στο σωρό του τμήματος
\\ αλλά το Γεγονός θα πάρει τον αριθμό στοιχείων που δηλώθηκαν
Τύπωσε Τύπος$(Α)
\\ δίνει mEvent
\\ Στο σωρό μπαίνει με αναφορά (αν μπει χωρίς θα είναι άχρηστο)
Τμήμα ΔεςΕδώ {
Διάβασε &Β
Κάλεσε Γεγονός Β, 40
}
ΔεςΕδώ &Α
Γεγονός Α Καθαρό
Κάλεσε Γεγονός Α, 100 \\ δεν κάνει τίποτα και πετάει το 100
\\ Μπορώ να το ορίσω ξανά
Γεγονός Α {
Διάβασε Χ
Συνάρτηση {
Τύπωσε Χ**2, " οκ2"
}
}
Κάλεσε Γεγονός Α 100 \\ το πρώτο κόμμα είναι προαιρετικό, εδώ δεν υπάρχει!
\\ Μπορώ να φτιάξω ένα γενικό γεγονός
\\ που θα έχουν όλα τα τμήματα πρόσβαση
Γενικό Γεγονός Α {
Διάβασε Χ
Συνάρτηση {
Τύπωσε Χ**2, " οκ3"
}
}
Κάλεσε Γεγονός Α 100
Ομάδα Αλφα {
μετρητής
Γεγονός Κ {
Διάβασε Κάτι$
Συνάρτηση {
\\ η συνάρτηση είναι προαιρετική χωρίς όνομα
\\ μπορώ να βάλω σημείωσεις μόνο εδώ
\\ τη Διάβασε Κάτι$ την βάζει το σύστημα
Τύπωσε Κάτι$
.μετρητής++
}
}
Τμήμα Διαδικασία {
Κάλεσε Γεγονός .Κ,"οκ"
}
}
Αλφα.Διαδικασία
Και εδώ το μεγάλο παράδειγμα στα Αγγλικά χωρίς τη χρήση του TheEvent αντικειμένου (δες παράδειγμα στην αναθεώρηση 173)
Form 60,30
Pen 14
Cls 5
Global nl$=chr$(13)+chr$(10)
Class Global Boiler {
Private:
temp, pressure
Public:
Module Boiler { Read .temp, .pressure }
Function getTemp { =.temp }
Function getPressure {=.pressure }
}
\\ TheEvent publisher
Class Global DelegateBoilerEvent {
m=1000
Event BoilerLogHandler { Read message$, &byrefValue }
Module LogProcess {
Read tempNow
remarks$ = "O. K"
b = Boiler(100, tempNow) : t = b.getTemp()
p = b.getPressure()
If ( t > 150 ή t < 80 ή p < 12 ή p > 15) Then {
remarks$ = "Need Maintenance"
}
Call .OnBoilerEventLog("Logging Info:\n", &.m)
Call .OnBoilerEventLog("Temparature" + str$(t) + "\nPressure:" + str$(p), &.m)
Call .OnBoilerEventLog("\nMessage: " + remarks$+"\n", &.m)
Pen 15 { Print .m } \\ 1006 1012
}
Function OnBoilerEventLog {
Call Event .BoilerLogHandler
}
}
Class Global BoilerInfoLogger {
Private:
filename$, fHandler, fHandlerRead, LogNo
Public:
Module BoilerInfoLogger {
Read .filename$
If Not Exist(.filename$) Then {
Open .filename$ For Wide Output As .fHandler
close #.fHandler
}
Open .filename$ For Wide Append As .fHandler
Open .filename$ For Wide Input As .fHandlerRead
}
Function Logger {
Read info$, &k
k++
.LogNo++
Print # .fhandler, Replace$("\n", nl$, info$);
}
Function GetLogNo {=.LogNo}
Module MoveToStart {
seek #.fHandlerRead,1
}
Function NextLine {
If Not Eof(#.fHandlerRead ) Then {
Line Input #.fHandlerRead, Paragraph$
Report Paragraph$
=True
}
}
Module Close {
Close #.fHandler , #.fHandlerRead
}
}
Group RecordBoilerInfo {
Function Logger {
Read Info$, &k
k++ : Report Replace$("\n", nl$, info$)
Rem : Print "stack for values size:", Stack.Size
}
Module Main {
Read YourLogFile$
filelog = BoilerInfoLogger(YourLogFile$)
boilerEvent = DelegateBoilerEvent()
Event boilerEvent.BoilerLogHandler new .Logger(), filelog.logger()
boilerEvent.LogProcess 12 : GetAllMessages()
boilerEvent.LogProcess 11 : filelog.MoveToStart : GetAllMessages()
filelog.Close
Print filelog.GetLogNo()
Sub GetAllMessages()
Pen 11 {
While filelog.NextLine() { }
}
End Sub
}
}
\\ Begin
RecordBoilerInfo.Main dir$+"boilerNew.txt"
\\ End
win "notepad", dir$+"boilerNew.txt"
Dos "Del "+quote$(dir$+"boilerNew.txt");
Δεν υπάρχουν σχόλια:
Δημοσίευση σχολίου
You can feel free to write any suggestion, or idea on the subject.