Blocks Procs και Closures.

Ξεκίνησε από iliasthes, 10 Φεβ 2010, 02:49:01 ΜΜ

« προηγούμενο - επόμενο »

iliasthes

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

Οι τρεις από αυτές είναι: Blocks Procs και Closures που ο συγγραφέας τις χρησιμοποιεί ως συνώνυμες. Εγώ τις αντιλαμβάνομαι ως "ομάδες εντολών", παραθέτω την περιγραφή τους:
It's the ability to take a block of code (code in between do and end), wrap it up in an object (called a proc), store it in a variable or pass it to a method, and run the code in the block whenever you feel like

Μία άλλη έννοια είναι η initialize και αναφέρεται στις μεθόδους της γλώσσας. Θα χαρώ να διαβάσω προτάσεις από συναδέλφους.  8)

Laertis

Παράθεση από: iliasthes στις 10 Φεβ 2010, 02:49:01 ΜΜ

Οι τρεις από αυτές είναι: Blocks Procs και Closures που ο συγγραφέας τις χρησιμοποιεί ως συνώνυμες. Εγώ τις αντιλαμβάνομαι ως "ομάδες εντολών", παραθέτω την περιγραφή τους:
It's the ability to take a block of code (code in between do and end), wrap it up in an object (called a proc), store it in a variable or pass it to a method, and run the code in the block whenever you feel like

Μία άλλη έννοια είναι η initialize και αναφέρεται στις μεθόδους της γλώσσας. Θα χαρώ να διαβάσω προτάσεις από συναδέλφους.  8)

Αν και δεν έχω ιδέα για τη γλώσσα Ruby, το πρώτο μου θυμίζει υποπρόγραμμα και ειδικά συνάρτηση (function).
Initialize = αρχικοποίηση , φαντάζομαι είναι κάποιος τρόπος αρχικοποίησης (πρωταρχικών τιμών ή defaults όπως λέμε στα Ελληνικά).
Δεν ξέρω αν βοηθώ Ηλία αλλά ειλικρινά με ενδιαφέρει ... Θα το ψάξω και θα επανέλθω  ;)
Νικολακάκης Γιώργος
Μηχανικός Η/Υ Συστημάτων
Καθηγητής Πληροφορικής
http://users.sch.gr/gnikola

pgrontas

Για την αρχικοποίηση συμφωνώ με το Γιώργο
Για το closure θα έλεγα κλειστή ή ολοκληρωμένη συνάρτηση. Δεν έχω συναντήσει κάποια ελληνική μετάφραση, είναι δικό μου οπότε μπορεί να μην είναι δόκιμος ο όρος.
Αν βρεις κάτι άλλο postαρε το θα με ενδιέφερε.
Programs must be written for people to read, and only incidentally for machines to execute - Harold Abelson

evry

Είσαι σίγουρος ότι τα blocks, procs και closures είναι ακριβώς το ίδιο?

Νομίζω ότι τα  blocks δεν έχουν όνομα, δηλαδή είναι απλά μπλοκ εντολών μέσα σε {}
ενώ τα procs είναι μπλοκ εντολών με όνομα, απλά στη γλώσσα αυτή τα βλέπεις σαν αντικείμενα, έτσι ώστε να τα περνάς και σαν παραμέτρους και
να έχεις δυναμική συμπεριφορά. Είναι δηλαδή bound σε κάποια μεταβλητή. Αυτά εγώ θα τα έλεγα διαδικασίες (χωρίς ορίσματα)

Τώρα τα closures περιέχουν ένα block η ένα proc μαζί με ένα reference σε κάποιες μεταβλητές, δηλαδή τις παραμέτρους ας πούμε του κώδικα. Απλά δεν έχω καταλάβει ακόμα  πως χρησιμοποιούνται οπότε δεν μπορώ να δώσω ακριβή μετάφραση για τον όρο.

όλα τα παραπάνω πάντα με επιφύλαξη
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

pgrontas

Παράθεση από: evry στις 10 Φεβ 2010, 03:39:57 ΜΜ
Τώρα τα closures περιέχουν ένα block η ένα proc μαζί με ένα reference σε κάποιες μεταβλητές, δηλαδή τις παραμέτρους ας πούμε του κώδικα. Απλά δεν έχω καταλάβει ακόμα  πως χρησιμοποιούνται οπότε δεν μπορώ να δώσω ακριβή μετάφραση για τον όρο.
Τα closures χρησιμοποιούνται για να μπορείς να χρησιμοποιείς τις συναρτήσεις ως αντικείμενα, δηλαδή να περνάς συνάρτηση ως παράμετρο σε άλλες συναρτήσεις ή να επιστρέφεις συνάρτηση από συνάρτηση κτλ. Είναι συναρτησιακό  ;D
Programs must be written for people to read, and only incidentally for machines to execute - Harold Abelson

Laertis

Το έψαξα ........
Αντιγράφω και μεταφέρω απο
http://ruby.activeventure.com/usersguide/rg/objinitialization.html

The initialize method

Whenever Ruby creates a new object, it looks for a method named initialize and executes it. So one simple thing we can do is use an initialize method to put default values into all the instance variables, so the inspect method will have something to say.

...... και απο τον ίδιο τον δημιουργό της Ruby

http://www.artima.com/intv/closures.html

Yukihiro Matsumoto: Blocks are basically nameless functions. You may be familiar with the lambda from other languages like Lisp or Python. Basically, you can pass a nameless function to another function, and then that function can invoke the passed-in nameless function.

Yukihiro Matsumoto: For example, we can create a closure out of a block. A closure is a nameless function the way it is done in Lisp. You can pass around a nameless function object, the closure, to another method to customize the behavior of the method.

Συνάδελφοι pgrontas και evry .... ΑΞΙΟΙ  ;)

Ας βρούμε τις κατάλληλες ελληνικές λέξεις τώρα  :)
Νικολακάκης Γιώργος
Μηχανικός Η/Υ Συστημάτων
Καθηγητής Πληροφορικής
http://users.sch.gr/gnikola

sstergou

#6
Τα closures, εκτός από την έννοια των ανωνύμων συναρτήσεων συμπεριλαμβάνουν και τις ελεύθερες μεταβλητές οι οποίες αποτελούν το εξωτερικό περιβάλλον της συνάρτησης.

Δηλαδή στον παρακάτω κώδικα javascript :

Κώδικας: javascript
var createClosure = function(param) {
   var local = createObject(param);
   return function() {
     //κάνε κάτι με το αντικείμενο local
   }
}

var closure = createClosure(param1);


Στην ουσία δημιουργούμε μία τοπική μεταβλητή local η οποία είναι διαθέσιμη μόνο στην συνάρτηση που επιστρέφεται από την createClosure. Απ' ότι καταλαβαίνω εγώ δημιουργούμε κάτι "κλειστό" για αυτό και το όνομα.

iliasthes

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

Ψάχνοντας βρήκα οτι με τη λέξη Procs εννοεί συντομογραφία της procedure που έχουμε και στην pascal, αλλά είναι κάτι πιο πολύπλοκο. Νομίζω πως ο συνάδελφος  pgrontas το περιέγραψε απόλυτα, αλλά στις ελληνικές μεταφράσεις για αυτή τη δομή ποια λέξη χρησιμοποιείται; Γιατί δεν είναι ακριβώς συνάρτηση ή διαδικασία. Στην ουσία συνδυάζει μεθόδους και συναρτήσεις.

Για το initialize, η πρώτη λέξη που σκέφτηκα ήταν αρχικοποίηση, όμως αρχικοποίηση εννοούμε μια προεπιλεγμένη τιμή κατά κάποιο τρόπο. Ίσως κάτι σύνθετο δηλαδή "αρχικοποίηση αντικειμένου" Δεν ξέρω έχω θολώσει λιγάκι  :(

iliasthes

#8
Παράθεση από: iliasthes στις 10 Φεβ 2010, 04:26:45 ΜΜ
Πρώτα από όλα έχω ενθουσιαστέι με τη συμμετοχή σας, ευχαριστώ.  Το θέμα είναι να βρω την κατάλληλη λέξη στα ελληνικά ώστε όταν ανεβάσω τη μετάφραση σε κανένα σάητ ή φόρουμ να μην μπερδεύεται όποιος το διαβάσει.

Ψάχνοντας βρήκα οτι με τη λέξη Procs εννοεί συντομογραφία της procedure που έχουμε και στην pascal, αλλά είναι κάτι πιο πολύπλοκο. Νομίζω πως ο συνάδελφος  pgrontas το περιέγραψε απόλυτα, αλλά στις ελληνικές μεταφράσεις για αυτή τη δομή ποια λέξη χρησιμοποιείται; Γιατί δεν είναι ακριβώς συνάρτηση ή διαδικασία. Στην ουσία συνδυάζει μεθόδους και συναρτήσεις.

Για το initialize, η πρώτη λέξη που σκέφτηκα ήταν αρχικοποίηση, όμως αρχικοποίηση εννοούμε μια προεπιλεγμένη τιμή κατά κάποιο τρόπο. Ίσως κάτι σύνθετο δηλαδή "αρχικοποίηση αντικειμένου" Δεν ξέρω έχω θολώσει λιγάκι  :(.

Ο συγγραφέας το αποκαλεί συνήθως initialize method. Οπότε το σκέφτομαι ως μέθοδο αρχικοποίησης του αντικειμένου τάδε.

Το συγκεκριμένο εγχειρίδιο είναι από τα πιο δημοφιλή για τη Ruby, αλλά διαβάζοντας το κατάλαβα πως ο συγγραφέας δεν έχει σπουδές πληρφοροικής, απλά εργάζεται επαγγελματικά εδώ και χρόνια και αντί της "επίσημης" ορολογίας, χρησιμοποιεί κυρίως την "ορολογία αργκό" που χρησιμοποιούν μεταξύ τους οι επαγγελματίες. Βέβαια δεν μπορείς να κατηγορήσεις έναν άνθρωπο που δημοσίευσε δωρεάν ένα εγχειρίδιο 60 σελίδων και έχει δώσει επίσης χωρίς κέρδος δικαίωμα μετάφρασης σε πολλές άλλες γλώσσες, σε όποιον του το ζητήσει.

pgrontas

Το σκέφτηκα λίγο περισσότερο το όνομα του closure: Μου αρέσει ως όνομα το εγκλεισμός. Τι λέτε;
Programs must be written for people to read, and only incidentally for machines to execute - Harold Abelson

sstergou

Σωστός! Εμένα μου αρέσει.

iliasthes

Δεκτή η πρόταση, κατοχυρώθηκε closure=εγκλεισμός :) 5 σελίδες μείνανε από τις 70. Μόλις τελειώσουν θα ανεβάσω το εγχειρίδιο να δείτε σε τι συμβάλλατε  8)

Laertis

Μπράβο Παναγιώτη, μου αρέσει κι εμένα ο εγκλεισμός !!!
Όσο για το initialize method συμφωνώ με αυτό που λες Ηλία "μέθοδο αρχικοποίησης του αντικειμένου τάδε".
Νικολακάκης Γιώργος
Μηχανικός Η/Υ Συστημάτων
Καθηγητής Πληροφορικής
http://users.sch.gr/gnikola