DedSec Project

smalltalk — συγκεντρωτικός οδηγός — DedSec Project

smalltalk — συγκεντρωτικός οδηγός Smalltalk Μοντέλο λειτουργίας Τα Smalltalk συστήματα βασίζονται σε αποστολή μηνυμάτων και live image, όχι μόνο σε standalone αρχεία κώδικα. Παράδειγμα…

Smalltalk

Μοντέλο λειτουργίας

Τα Smalltalk συστήματα βασίζονται σε αποστολή μηνυμάτων και live image, όχι μόνο σε standalone αρχεία κώδικα.

Παράδειγμα

Transcript show: (3 + 4) printString; cr.

Δοκίμασέ το με νόημα

Παρατήρησε message sends σε workspace και ξεχώρισε object inspection από serialization.

Σφάλμα που πρέπει να ξεχωρίσεις

Το image state και τα πακέτα επηρεάζουν τα αποτελέσματα· κράτα καθαρό snapshot.

Για να κρίνεις την άσκηση, κατέγραψε την αρχική είσοδο, την πρόβλεψη και την παρατήρηση σε πραγματικό, συμβατό περιβάλλον Smalltalk. Δώσε ξεχωριστό παράδειγμα όπου αλλάζει μόνο μία μεταβλητή ή ένα όρισμα. Αν εργάζεσαι χωρίς την αναγκαία εφαρμογή, μελέτησε τη σύνταξη ως παράδειγμα και μην παρουσιάζεις το κείμενο ως εκτελεσμένο test.

Smalltalk — Αναλυτικός οδηγός εξάσκησης

Μικρή αφετηρία πηγαίου κώδικα

Transcript show: 'Hello, Ada!'; cr.

Περιβάλλον: Load in Pharo or another Smalltalk image.. Κράτησε αντίγραφο του αρχικού κώδικα και σημείωσε έκδοση εργαλείου. Ξεχώρισε αν η εκτέλεση επιστρέφει τιμή, εμφανίζει κείμενο ή αλλάζει state. Για τις πρώτες δοκιμές χρησιμοποίησε απομονωμένο περιβάλλον, όχι πραγματικούς λογαριασμούς ή δεδομένα.

Ανάλυση του ιδιαίτερου μηχανισμού

Στείλε messages σε collection με collect:/select: και εξέτασε self έναντι super σε μικρή class.

Διάγνωση κρίσιμου ορίου

Smalltalk image κρατά state μεταξύ συνεδριών· επανάλαβε σε καθαρό image για αξιόπιστο αποτέλεσμα.

Smalltalk — Διαδρομή ουσιαστικής εξάσκησης

Περιβάλλον και τρόπος σκέψης

Χρησιμοποίησε Pharo Smalltalk Playground. Τα αντικείμενα δέχονται messages: το stock at: 'bolt' put: 3 στέλνει keyword message με δύο παραμέτρους. Στα cascades, το ελληνικό ερωτηματικό (;) στέλνει επόμενα μηνύματα στον ίδιο αρχικό παραλήπτη, όχι στην επιστρεφόμενη τιμή προηγούμενης εντολής.

Εκτέλεση σε Playground

| stock total |
stock := Dictionary new.
stock at: 'bolt' put: 3.
stock at: 'nut' put: 2.
total := stock values inject: 0 into: [ :sum :quantity |
    sum + quantity
].
Transcript show: total printString; cr.
Transcript show: (total = 5) printString; cr.

Στο Transcript περιμένουμε 5 και true. Το Dictionary συνδέει κλειδιά με τιμές. Νέα καταχώρηση με το ίδιο κλειδί αντικαθιστά την ποσότητα και δεν δημιουργεί τρίτη εγγραφή. Το inject:into: ξεκινά από το 0 και αθροίζει, ανεξάρτητα από τη σειρά του dictionary.

Ελεγχόμενα πειράματα

  1. Άλλαξε bolt από 3 σε 7. Έλεγξε ότι οι εγγραφές παραμένουν δύο.
  2. Ζήτησε κλειδί που δεν υπάρχει με at: και διάβασε το exception. Με at:ifAbsent: όρισε ρητό fallback.
  3. Σύγκρινε Dictionary με OrderedCollection: πότε χρειάζεται key lookup και πότε προβλέψιμη θέση στοιχείου;
  4. Δοκίμασε κενή συλλογή. Το fold με αρχική τιμή 0 πρέπει να δώσει 0.
  5. Φτιάξε SUnit δοκιμή για replacement και διαφορετική δοκιμή για απουσία κλειδιού έναντι αποθέματος μηδέν.

Απόδειξη

Κράτησε Pharo image/version, κώδικα Playground, έξοδο Transcript και πραγματικά αποτελέσματα SUnit. Οι Smalltalk διάλεκτοι διαφέρουν σε εργαλεία και globals. Αναφορά: https://ctskennerton.github.io/2020/12/21/using-dictionaries-in-pharo-smalltalk/