Κυριακή 27 Σεπτεμβρίου 2015

Περί Ρουτινών, τοπικών και προσωρινών μεταβλητών (Μ2000)

\\ Εδώ θα μάθουμε για τις τοπικές μεταβλητές, τα μπλοκ προσωρινών ορισμών,
\\ θα δούμε την Ρουτίνα η οποία είναι ένα μέρος τμήματος, και όχι τμήμα
\\ και αυτό γιατί υπάρχει στο τμήμα και βλέπει τις μεταβλητές του και δημιουργεί προσωρινά
\\ μεταβλητές σαν ήταν το ίδιο το τμήμα
\\ Τις ρουτίνες δεν μπορεί να τις προσπελάσει άλλο τμήμα
\\ Σαν ορισμό μπορεί να την βρει και ένα τμήμα που είναι γραμμένο στο ίδιο κείμενο προγράμματος
\\ αλλά θα τρέξει ένα αντίγραφο στο δικό του χώρο (namespace), με τις δικές του μεταβλητές
\\ Οι ρουτίνες είναι χρήσιμες για να τρέχουμε επαναλαμβανόμενο κώδικα σε διάφορα σημεία
\\ ενός τμήματος. Παρέχουν την ευκολία να "θεωρούν" στατικές τις μεταβλητές του τμήματος.
\\ Σε μια ρουτίνα μπορούμε να φτιάξουμε οτιδήποτε, τμήματα, συναρτήσεις, ομάδες, πίνακες κ.α.
\\ Στο πέρας της εκτέλεσης όλα αυτά θα χαθούν.
\\ Ό,τι αφήσει σε μεταβλητές που υπήρχαν στο τμήμα όταν κλήθηκε και επίσης ό,τι αφήσει
\\ στο σωρό, θα μείνουν. Επίσης θα μείνουν και τυχόν νήματα που δημιουργήθηκαν εντός.
\\ (θα δούμε άλλη φορά τα νήματα, είναι προχωρημένο θέμα)



Τοπική ΧωρίςΤιμή, Λ=100, Μ=500 \\ στα τμήματα εξ ορισμού οι μεταβλητές είναι τοπικές


\\ με την  εντολή Τοπική απλά δημιουργούμε μεταβλητές ακόμα και χωρίς τιμές
\\ Η τοπική παίζει ρόλο στις ρουτίνες και στις κλάσεις (διαφορετικό ρόλο στις κλάσεις)


Για Αυτό { \\ αυτό είναι μπλοκ για προσωρινούς ορισμούς
      Τοπική ΧωρίςΤιμή \\ φτιάχνει άλλη μία με το ίδιο όνομα
      ΧωρίςΤιμή++
      Τύπωσε ΧωρίςΤιμή \\ τυπώνει 1
}
      Τύπωσε ΧωρίςΤιμή \\ τυπώνει 0
   
      \\ βάζω στο σωρό τον αριθμό ένα για να δείξω ότι διαβάζεται από τη ρουτίνα
Βάλε 1
Διαμεσου για_σωρο(3) \\ η Διαμέσου υπάρχει και ως Gosub στα αγγλικά στη Μ2000.
Τύπωσε αριθμός, Έγκυρο(κάπα), Μ
\\          110          0


\\ δεν είναι έγκυρη η μεταβλητή κάπα
\\ δεν χρειάζεται η έξοδος
\\ θα γίνει έξοδος όταν βρει το ρουτινα ο διερμηνευτής.


ρουτινα για_σωρο(α)
      \\ οι ρουτίνες θέλουν παρενθέσεις. Δεν είναι υποχρεωτικό να βάλουμε παραμέτρους
      \\ παράμετροι με & σημαίνει πέρασμα με αναφορά.
      \\ μπορούμε να περάσουμε πίνακα και συνάρτηση με αναφορά
      βάλε α*α+Λ+αριθμός \\ διαβάζουμε και τον σωρό του τμήματος
      κάπα=1000
\\ δημιουργεί την Μ η οποία έχει προτεραιότητα σε σχέση με τη Μ του τμήματος
      Τοπική Μ=3000
      Τύπωσε Μ
      Αν Λ=100 τότε έξοδος ρουτίνας
      \\ στο τέλος οι α, κάπα και  Μ θα σβηστούν.
      Τύπωσε "Θα το δεις αν κάνεις το Λ<>100"
      \\ οι ρουτίνες έχουν αναδρομή, όπως οι συναρτήσεις.
      \\ Τα τμήματα μπορούν να κληθούν με την κάλεσε και μέσω αυτής έχουν αναδρομή
τελος ρουτινας \\ χωρίς τόνους για να γίνει η έξοδος, δες δυο εντολές πάνω


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

Να και ένα παράδειγμα ( η ~ σε εκφράσεις με αλφαριθμητικά είναι η Like της Vb6):

\\ Ψεύτικη Κονσόλα!
επίπεδο_κονσόλας=0
αλφα$=""
Φόρμα 60,30
Οθόνη 1,0
Πένα 14
επανέλαβε {
      επίλεξε με επίπεδο_κονσόλας
      με 0 \\ μετά από κάθε με μπορεί να υπάρχει μια γραμμή ή ένα μπλοκ αλλά όχι κενές γραμμές
      {           \\ ή δυο ή περισσότερες χωρίς μπλοκ εντολών
            Διαμέσου Κονσ("αναμονή$","-*")
            αν άλφα$ ~ "-[εΕeE]" τότε {
                  επίπεδο_κονσόλας=1
            } αλλιώς.αν άλφα$ ~ "-[φΦFf]" τότε επίπεδο_κονσόλας=2
      }
      με 2
      {
            Διαμέσου Κονσ("Σύστημα Φορουμ:","*")
            αν άλφα$ ~ "-[εΕeE]" τότε {
                  επίπεδο_κονσόλας=0
            } αλλιώς.αν άλφα$="-[RrΡρ]" τότε επίπεδο_κονσόλας=3
      }
      αλλιώς
      Προς τερματισμό \\ η Προς μέσα σε Με σε Επίλεξε δουλεύει αν είναι σε μια γραμμή.
      Τέλος Επιλογής
} πάντα


τερματισμό:
Τύπωσε "Τερματισμός...Γεια"


Ρουτινα Κονσ(κατάσταση$, κάπως_έτσι$)
      επανέλαβε {
                  Πένα 15 { Τύπωσε κατάσταση$; }
                  Πένα 11 { εισαγωγή "", αλφα$}
                  αλφα$=αποκ$(άλφα$) : αν αλφα$="" τότε κυκλικα
       }  μέχρι αλφα$ ~ κάπως_έτσι$
       διαμεσου 1000
Τελος Ρουτινας


\\ η διαμέσου 1000 είναι πλεονασμός, απλά μπήκε εδώ για να το δούμε


1000 Πλάγια 1 : τύπωσε "βρήκα αυτό:"; αλφα$ : Πλάγια 0 : Επιστροφή





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

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

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