Σε αυτήν την αναθεώρηση βελτίωσα τη χρήση των Break και Ctrl+C. Επιπλέον το Esc σε ένα μπλοκ Δες {} ή Try {} τώρα το σταματάει, μαζί με το κώδικα. Υπάρχει η εντολή ΔΙΑΦΥΓΗ ΟΧΙ ή ESCAPE OFF η οποία βγάζει εκτός το ESC. Όταν τρέχουμε τον διερμηνευτή στην πιο γρήγορη ταχύτητα (ΓΡΗΓΟΡΑ ! ή FAST !, στη κονσόλα ή ΘΕΣΕ ΓΡΗΓΟΡΑ! ή SET FAST! σε πρόγραμμα), τότε δεν γίνονται αυτόματα ανανεώσεις της οθόνης. Παλαιότερα είχα συνδέσει την χρήση των CTRL+C και BREAK με την ανανέωση της οθόνης, αλλά τώρα το άλλαξα ώστε κάθε δευτερόλεπτο ο διερμηνευτής ελέγχει αν αυτά τα πλήκτρα είναι πατημένα, εκτός από την περίπτωση που εκτελεί κάποιο γεγονός (οπότε δεν το διακόπτουμε, αλλά αυτά είναι σύντομα) ή αν έχουμε φόρμες χρήστη. Επειδή στις φόρμες ισχύει το Alt F4 που κλείνει την φόρμα, δεν χρειάζεται άλλο τρόπο "κράτησης".
Μικρές βελτιώσεις στα νήματα, και επιπλέον βρήκα και ένα λάθος, στις λάμδα συναρτήσεις, όπου μια τιμή σε μια συνάρτηση της VB6 πέρναγε με αναφορά, ενώ ήταν από πίνακα, με συνέπεια σε αυτήν την συνάρτηση ο πίνακας να μην μπορούσε να αλλάξει μέγεθος (τον είχε κλειδώσει). Δεν το ήξερα και το βρήκα μέσω ενός παραδείγματος που έκανα με χρήση αναδρομής σε λάμδα συνάρτηση. Το παράδειγμα δεν ήταν σωστό και λογικά θα περίμενα να βγάλει Full Stack, δηλαδή ότι γέμισε ο σωρός επιστροφής Έχω φτιάξει το πρόγραμμα έτσι ώστε να μην πέφτει όταν γεμίζει ο σωρός επιστροφής, δηλαδή τον έχει μετρήσει στην αρχή της εκτέλεσης, και μετά ελέγχει το μέγεθός του, κάθε φορά που καλούμε ένα τμήμα ή μια συνάρτηση (επειδή αυτά είναι που τρώνε περισσότερο από το σωρό επιστροφής). Τελικά ως προς το πρόβλημα, λόγω του λάθους, αυτό που έπρεπε να βγει, ως ένδειξη λάθους δεν βγήκε! Αυτό σήμαινε ότι άλλο λάθος είχε προκύψει. Έτρεξα τον διερμηνευτή στο περιβάλλον της VB6, και το βρήκα! Το μεγαλύτερο πρόβλημα στο θέμα του λάθους, δεν είναι το πώς θα το λύσεις, αλλά το πότε μαθαίνεις για την ύπαρξή του. Άμα μάθεις λοιπόν για το λάθος, δεν αργείς να το διορθώσεις. Το πρόβλημα ήταν ότι όταν πέρναγα με αναφορά στοιχείο ενός πίνακα, δεν μπορούσα σε αυτόν τον πίνακα να αλλάξω μέγεθος. Στη Μ2000 μπορούμε να περνάμε με αναφορά στοιχείο πίνακα. Δείτε όμως πώς. Πρώτα η γλώσσα φτιάχνει μια πρόσκαιρη μεταβλητή, δίνει σε αυτήν την τιμή του στοιχείου του πίνακα, και μετά αυτή μεταφέρεται στο τμήμα που καλούμε. Στην επιστροφή από το τμήμα γίνεται η αντιγραφή από αυτή τη μεταβλητή στο στοιχείο του πίνακα...και εκεί μπορεί να βρεθεί λάθος αν ο πίνακας έχει λιγότερα στοιχεία, και δεν έχει θέση για αυτό που αρχικά πήραμε. H VB6 δίνει κατευθείαν την διεύθυνση του στοιχείου και κλειδώνει το πίνακα! Στην επιστροφή, τον ξεκλειδώνει! Η λύση ήταν να αλλαχθεί ο τρόπος που πέρναγε η τιμή (αφού δεν με ενδιέφερε η αλλαγή της, δεν γίνονταν αλλαγή στη συνάρτηση που καλούσα), σε By Value, δηλαδή αντέγραφα τον αριθμό (από τον πίνακα) και έτσι η VB6 δεν τον κλείδωνε!
Μικρές βελτιώσεις στα νήματα, και επιπλέον βρήκα και ένα λάθος, στις λάμδα συναρτήσεις, όπου μια τιμή σε μια συνάρτηση της VB6 πέρναγε με αναφορά, ενώ ήταν από πίνακα, με συνέπεια σε αυτήν την συνάρτηση ο πίνακας να μην μπορούσε να αλλάξει μέγεθος (τον είχε κλειδώσει). Δεν το ήξερα και το βρήκα μέσω ενός παραδείγματος που έκανα με χρήση αναδρομής σε λάμδα συνάρτηση. Το παράδειγμα δεν ήταν σωστό και λογικά θα περίμενα να βγάλει Full Stack, δηλαδή ότι γέμισε ο σωρός επιστροφής Έχω φτιάξει το πρόγραμμα έτσι ώστε να μην πέφτει όταν γεμίζει ο σωρός επιστροφής, δηλαδή τον έχει μετρήσει στην αρχή της εκτέλεσης, και μετά ελέγχει το μέγεθός του, κάθε φορά που καλούμε ένα τμήμα ή μια συνάρτηση (επειδή αυτά είναι που τρώνε περισσότερο από το σωρό επιστροφής). Τελικά ως προς το πρόβλημα, λόγω του λάθους, αυτό που έπρεπε να βγει, ως ένδειξη λάθους δεν βγήκε! Αυτό σήμαινε ότι άλλο λάθος είχε προκύψει. Έτρεξα τον διερμηνευτή στο περιβάλλον της VB6, και το βρήκα! Το μεγαλύτερο πρόβλημα στο θέμα του λάθους, δεν είναι το πώς θα το λύσεις, αλλά το πότε μαθαίνεις για την ύπαρξή του. Άμα μάθεις λοιπόν για το λάθος, δεν αργείς να το διορθώσεις. Το πρόβλημα ήταν ότι όταν πέρναγα με αναφορά στοιχείο ενός πίνακα, δεν μπορούσα σε αυτόν τον πίνακα να αλλάξω μέγεθος. Στη Μ2000 μπορούμε να περνάμε με αναφορά στοιχείο πίνακα. Δείτε όμως πώς. Πρώτα η γλώσσα φτιάχνει μια πρόσκαιρη μεταβλητή, δίνει σε αυτήν την τιμή του στοιχείου του πίνακα, και μετά αυτή μεταφέρεται στο τμήμα που καλούμε. Στην επιστροφή από το τμήμα γίνεται η αντιγραφή από αυτή τη μεταβλητή στο στοιχείο του πίνακα...και εκεί μπορεί να βρεθεί λάθος αν ο πίνακας έχει λιγότερα στοιχεία, και δεν έχει θέση για αυτό που αρχικά πήραμε. H VB6 δίνει κατευθείαν την διεύθυνση του στοιχείου και κλειδώνει το πίνακα! Στην επιστροφή, τον ξεκλειδώνει! Η λύση ήταν να αλλαχθεί ο τρόπος που πέρναγε η τιμή (αφού δεν με ενδιέφερε η αλλαγή της, δεν γίνονταν αλλαγή στη συνάρτηση που καλούσα), σε By Value, δηλαδή αντέγραφα τον αριθμό (από τον πίνακα) και έτσι η VB6 δεν τον κλείδωνε!
Δεν υπάρχουν σχόλια:
Δημοσίευση σχολίου
You can feel free to write any suggestion, or idea on the subject.