diff options
| author | Per Lilja <perlilja@gmail.com> | 2015-10-21 13:28:36 +0200 | 
|---|---|---|
| committer | Per Lilja <perlilja@gmail.com> | 2015-10-21 13:28:36 +0200 | 
| commit | 3f8b067a0cace44bb43bdd08561b0efc747fb26c (patch) | |
| tree | 1e17c3f1968f7b2f97ea9f84ca0098224ff60786 /el-gr | |
| parent | d1a822f96c88855b2cbb649a4ea7b452e4104164 (diff) | |
| parent | ef6973b13f50063462d28a96ac57e93aed40844c (diff) | |
Merge pull request #1 from adambard/master
Update fork
Diffstat (limited to 'el-gr')
| -rw-r--r-- | el-gr/css-gr.html.markdown | 243 | ||||
| -rw-r--r-- | el-gr/racket-gr.html.markdown | 72 | ||||
| -rw-r--r-- | el-gr/scala-gr.html.markdown | 34 | 
3 files changed, 296 insertions, 53 deletions
| diff --git a/el-gr/css-gr.html.markdown b/el-gr/css-gr.html.markdown new file mode 100644 index 00000000..327dc1a0 --- /dev/null +++ b/el-gr/css-gr.html.markdown @@ -0,0 +1,243 @@ +--- +language: css +contributors: +    - ["Kostas Bariotis", "http://kostasbariotis.com"] +filename: css-gr.html.markdown +lang: el-gr +--- + +Η αρχική μορφή του Παγκόσμιου Ιστού αποτελούταν απο καθαρό κείμενο, χωρίς οπτικά αντικείμενα. Με το πέρας  +του χρόνου και την εξέλιξη των Φυλλομετρητών, οι πλούσιες σελίδες, σε οπτικά και πολυμεσικά αντικείμενα,  +γίναν καθημερινότητα. + +Η CSS μας βοηθάει να διαχωρήσουμε το περιεχόμενο της σελίδας μας (HTML) απο την οπτική της περιγραφή. + +Με την CSS ορίζουμε οπτικές ιδιότητες (χρώμα, μέγεθος, κλπ) σε HTML αντικείμενα (H1, div, κλπ). + +```css +/* Σχόλια εμφανίζονται εντός καθέτου-αστερίσκου, όπως εδώ.  +   Δεν υπάρχουν σχόλια μια γραμμής και πολλών. */ + +/* #################### +   ## ΚΑΝΟΝΕΣ +   #################### */ + +/* ένας κανόνας χρησιμοποιείτε για να στοχεύσουμε ένα αντικείμενο (selector). +selector { property: value; /* περισσότερες ιδιότητες...*/ } + +/* +Αυτό είναι ενα παράδειγμα αντικειμένου¨ + +<div class='class1 class2' id='anID' attr='value' otherAttr='en-us foo bar' /> +*/ + +/* Μπορούμε να το στοχεύσουμε με την χρήση CSS κλάσεων */ +.class1 { } + +/* Ή και με τις δύο κλάσεις! */ +.class1.class2 { } + +/* Και με το όνομα του */ +div { } + +/* Ή με το id του */ +#anID { } + +/* Ή με το γεγονός ότι περιέχει ενα attribute */ +[attr] { font-size:smaller; } + +/* Ή οτι το attribute αυτό έχει μια συγκεκριμένη τιμή */ +[attr='value'] { font-size:smaller; } + +/* Ξεκινάει απο το λεκτικό (CSS 3) */ +[attr^='val'] { font-size:smaller; } + +/* Καταλήγει σε αυτο το λεκτικό (CSS 3) */ +[attr$='ue'] { font-size:smaller; } + +/* Περιέχει κάποιο λεκτικό */ +[otherAttr~='foo'] { } +[otherAttr~='bar'] { } + +/* περιέχει το λεκτικό σε λίστα χωρισμένη με παύλες, δηλαδή: "-" (U+002D) */ +[otherAttr|='en'] { font-size:smaller; } + + +/* Μπορούμε να προσθέσουμε μεταξύ τους selectors για να δημιουργήσουμε πιο αυστηρούς.  +  Δεν βάζουμε κενά ανάμεσα. */ +div.some-class[attr$='ue'] { } + +/* Μπορούμε να επιλέξουμε αντικείμενα που βρίσκονται μέσα σε άλλα. */ +div.some-parent > .class-name { } + +/* Ή κάποιο αντικείμενο απόγονο ανεξαρτήτου του βάθους της σχέσης τους. */ +div.some-parent .class-name { } + +/* ΠΡΟΣΟΧΗ: ο ίδιος selector χωρίς κενά έχει άλλο νόημα. (Άσκηση προς τον αναγνώστη) */ +div.some-parent.class-name { } + +/* Μπορούμε να επιλέξουμε αντικείμενα με βάση το αμέσως επόμενο αντικείμενο στο ίδιο επίπεδο. */ +.i-am-just-before + .this-element { } + +/* Ή οποιοδήποτε αντικείμενο που προηγείται */ +.i-am-any-element-before ~ .this-element { } + +/* Με την βοήθεια των ψευδο-κλάσεων μπορούμε να επιλέξουμε αντικείμενα που βρίσκονται σε μια  +  ορισμένη κατάασταση. */ + +/* π.χ. όταν ο κέρσορας είναι πάνω απο ένα αντικείμενο */ +selector:hover { } + +/* ή ένας υπερσύνδεσμος που πατήθηκε */ +selector:visited { } + +/* ή που δεν πατήθηκε */ +selected:link { } + +/* ή ένα αντικείμενο που επιλέχθηκε */ +selected:focus { } + +/* οποιοδήποτε αντικείμενο είναι το πρώτο παιδί των γονέων του */ +selector:first-child {} + +/* οποιοδήποτε αντικείμενο είναι το πρώτοτελευταίο παιδί των γονέων του */ +selector:last-child {} + +/* Όπως και με τις ψευδο-κλάσεις, τα ψευδο-αντικείμενα μας επιτρέπουν τα τροποοιήσουμε συγκεκριμένα  +  κομμάτια της σελίδας */ + +/* επιλέγει το ψευδο-αντικείμενο ακριβώς πριν απο το αντικείμενο */ +selector::before {} + +/* επιλέγει το ψευδο-αντικείμενο ακριβώς μετά απο τον αντικείμενο */ +selector::after {} + +/* Σε σωστά σημεία (όχι πολύ ψηλά στην ιεραρχία) ο αστερίσκος μπορείς να χρησιμοποιηθεί για να  +  επιλέξουμε όλα τα αντικείμενα */ +* { } /* όλα τα αντικείμενα της σελίδας */ +.parent * { } /* όλους τους απόγονους */ +.parent > * { } /* όλους τους απόγονους πρώτου επιπέδου */ + +/* #################### +   ## Ιδιότητες +   #################### */ + +selector { +     +    /* Οι μονάδες μπορούν να είναι είτε απόλυτες είτε σχετικές */ +     +    /* Σχετικές μονάδες */ +    width: 50%;       /* ποσοστό επί του πλάτους του γονέα */ +    font-size: 2em;   /* πολλαπλασιαστής της αρχικής τιμής του αντικειμένου */ +    font-size: 2rem;  /* ή της τιμής του πρώτου αντικειμένου στην ιεραρχία */ +    font-size: 2vw;   /* πολλαπλαστιαστής του 1% του οπτικού πλάτους */ +    font-size: 2vh;   /* ή τους ύψους */ +    font-size: 2vmin; /* οποιοδήποτε απο αυτα τα δύο είναι το μικρότερο */ +    font-size: 2vmax; /* ή το μεγαλύτερο */ +     +    /* Απόλυτες μονάδες */ +    width: 200px;     /* pixels */ +    font-size: 20pt;  /* στιγμες */ +    width: 5cm;       /* εκατοστά */ +    min-width: 50mm;  /* χιλιοστά */ +    max-width: 5in;   /* ίντσες */ +     +    /* Χρώματα */ +    color: #F6E;                 /* σύντομη δεκαεξαδική μορφή */ +    color: #FF66EE;              /* δεκαεξαδική μορφή */ +    color: tomato;               /* χρώμα με το όνομα του (συγκεκριμένα χρώματα) */ +    color: rgb(255, 255, 255);   /* τιμή RGB */ +    color: rgb(10%, 20%, 50%);   /* τιμή RGB με ποσοστά */ +    color: rgba(255, 0, 0, 0.3); /* τιμή RGBA (CSS3) σσ. 0 < a < 1 */ +    color: transparent;          /* όπως και το παραπάνω με a = 0 */ +    color: hsl(0, 100%, 50%);    /* τιμή hsl με ποσοστά (CSS 3) */ +    color: hsla(0, 100%, 50%, 0.3); /* τιμή hsla με ποσοστά και a */ +     +    /* Εικόνες μπορούν να τοποθετηθούν στον φόντο ενός αντικειμένου */ +    background-image: url(/img-path/img.jpg); +     +    /* Γραμματοσειρές */ +    font-family: Arial; +    /* εάν η γραμματοσειρα περιέχει κενά */ +    font-family: "Courier New"; +    /* εάν η πρώτη γραμματοσειρα δε βρεθεί εγκατεστημένη στο Λειτουργικό Σύστυμα, αυτόματα  +      επιλέγετε η δεύτερη, κ.κ.ε. */ +    font-family: "Courier New", Trebuchet, Arial, sans-serif; +} +``` + +## Χρήση + +Αποθηκεύουμε ένα αρχείο CSS με την επέκταση `.css`. + +```xml +<!-- Πρέπει να συμπεριλάβουμε το αρχείο στην επικεφαλίδα(head) ενος HTML αρχείου. +  σσ. http://stackoverflow.com/questions/8284365 --> +<link rel='stylesheet' type='text/css' href='path/to/style.css' /> + +<!-- Μπορούμε να το ενσωματώσουμε --> +<style> +   a { color: purple; } +</style> + +<!-- Ή απευθείας σε κάποιο αντικείμενο (inline) --> +<div style="border: 1px solid red;"> +</div> +``` + +## Ειδικότητα των κανόνων (Cascading απο το αγγλικό τίτλο Cascading Style Sheets) + +Ένα αντικείμενο μπορεί να στοχευθεί απο πολλούς κανόνες και μπορεί η ίδια ιδιότητα να  +περιλαμβάνετε σε πολλούς κανόνες. Σε αυτές της περιπτώσεις υπερισχύει πάντα ο πιο ειδικός  +κανόνας και απο αυτούς, αυτός που εμφανίζεται τελευταίος. + +```css +/* A */ +p.class1[attr='value'] + +/* B */ +p.class1 { } + +/* C */ +p.class2 { } + +/* D */ +p { } + +/* E */ +p { property: value !important; } +``` + +```xml +<p style='/*F*/ property:value;' class='class1 class2' attr='value' /> +``` + +Η σειρά θα είναι: + +* `E` έχει μεγαλύτερο βάρος λόγω του `!important`. Κάλες πρακτικές λένε να το αποφεύγουμε. +* `F` επόμενο λόγω του inline κανόνα. +* `A` επόμενο λόγω του το οτι είναι πιο ειδικό. Περιέχει τρεις selectors. +* `C` επόμενο, λόγω του οτι εμφανίζεται μετα το Β και ας έχει την ίδια ειδικότητα. +* `B` επόμενο. +* `D` τελευταίο. + +## Συμβατότητα + +Τα περισσότερα απο τα παραπάνω ήδη υποστηρίζονται απο τους γνωστούς φυλλομετρητές. Άλλα θα πρέπει  +πάντα να ελέγχουμε πρωτου τους χρησιμοποιήσουμε. + +## Περισσότερα + +* Έλεγχος συμβατότητας, [CanIUse](http://caniuse.com). +* CSS Playground [Dabblet](http://dabblet.com/). +* [Mozilla Developer Network's CSS documentation](https://developer.mozilla.org/en-US/docs/Web/CSS) +* [Codrops' CSS Reference](http://tympanus.net/codrops/css_reference/) + +## Μελέτη + +* [Understanding Style Precedence in CSS: Specificity, Inheritance, and the Cascade](http://www.vanseodesign.com/css/css-specificity-inheritance-cascaade/) +* [Selecting elements using attributes](https://css-tricks.com/almanac/selectors/a/attribute/) +* [QuirksMode CSS](http://www.quirksmode.org/css/) +* [Z-Index - The stacking context](https://developer.mozilla.org/en-US/docs/Web/Guide/CSS/Understanding_z_index/The_stacking_context) +* [SASS](http://sass-lang.com/) and [LESS](http://lesscss.org/) for CSS pre-processing +* [CSS-Tricks](https://css-tricks.com) diff --git a/el-gr/racket-gr.html.markdown b/el-gr/racket-gr.html.markdown index 4c4576bb..589adfeb 100644 --- a/el-gr/racket-gr.html.markdown +++ b/el-gr/racket-gr.html.markdown @@ -31,12 +31,12 @@ H Racket είναι μια γενικού σκοπού, πολυ-υποδειγ  ;; Τα σχόλια S-expression (εκφράσεις S) comments απορρίπτουν την  ;; έκφραση που ακολουθεί, δυνατότητα που είναι χρήσιμη για να -;; κάνουμε σχόλια κάποιες εκφράσεις κατα τη διάρκεια του debugging +;; κάνουμε σχόλια κάποιες εκφράσεις κατά τη διάρκεια του debugging  #; (αυτή η έκφραση δεν θα εκτελεστεί)  ;; (Αν δεν καταλαβαίνεται τι είναι οι εκφράσεις , περιμένετε... Θα το μάθουμε -;; πολύ συντομα!) +;; πολύ σύντομα!)  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @@ -57,8 +57,8 @@ H Racket είναι μια γενικού σκοπού, πολυ-υποδειγ  ;; όπου το f είναι η συνάρτηση και τα x y z  ;; είναι οι όροι που η συνάρτηση δέχεται  ;; ως ορίσματα. Αν θέλουμε να δημιουργήσουμε -;; μια λίστα στην κυριολεξία απο δίαφορα δεδομένα, -;; χρησιμοποιούμε το ' για να το εμποδίσουμε απο το να +;; μια λίστα στην κυριολεξία από δίαφορα δεδομένα, +;; χρησιμοποιούμε το ' για να το εμποδίσουμε από το να  ;; αξιολογηθεί σαν έκφραση. Για παράδειγμα:  '(+ 1 2) ; => Παραμένει (+ 1 2) και δεν γίνεται η πράξη  ;; Τώρα , ας κάνουμε μερικές πράξεις @@ -88,15 +88,15 @@ H Racket είναι μια γενικού σκοπού, πολυ-υποδειγ  ;;; Τα αλφαριθμητικά είναι πίνακες χαρακτήρων συγκεκριμένου μήκους  "Hello, world!"  "Benjamin \"Bugsy\" Siegel"   ; Το backslash είναι χαρακτήρας διαφυγής -"Foo\tbar\41\x21\u0021\a\r\n" ; Συμπεριλαμβάνονται οι χαρακτήες διαφυγής της C, +"Foo\tbar\41\x21\u0021\a\r\n" ; Συμπεριλαμβάνονται οι χαρακτήρες διαφυγής της C,  							  ; σε Unicode  "λx:(μα.α→α).xx"              ; Μπορούν να υπάρχουν και Unicode χαρακτήρες -;; Μπορούμε να εννώσουμε αλφαριθμητικά! +;; Μπορούμε να ενώσουμε αλφαριθμητικά!  (string-append "Hello " "world!") ; => "Hello world!" -;; Ένα αλφαριθμητικό μπορούμε να το χρησιμοπιησουμε -;; όπως και μια λίστα απο χαρακτήρες +;; Ένα αλφαριθμητικό μπορούμε να το χρησιμοποιήσουμε +;; όπως και μια λίστα από χαρακτήρες  (string-ref "Apple" 0) ; => #\A ;; Παίρνουμε το πρώτο στοιχείο  ;; Η συνάρτηση format μπορεί να χρησιμοποιηθεί για @@ -117,18 +117,18 @@ H Racket είναι μια γενικού σκοπού, πολυ-υποδειγ  some-var ; => 5  ;; Μπορούμε επίσης να χρησιμοποιήσουμε unicode χαρακτήρες. -(define ⊆ subset?) ;; Εδώ ουστιαστικά δίνουμε στη ήδη ύπαρχουσα συνάρτηση subset? +(define ⊆ subset?) ;; Εδώ ουσιαστικά δίνουμε στη ήδη υπάρχουσα συνάρτηση subset?  				   ;; ένα νέο όνομα ⊆ , και παρακάτω την καλούμε με το νέο της όνομα.  (⊆ (set 3 2) (set 1 2 3)) ; => #t -;; Αν ζητήσουμε μια μεταβλητή που δεν έχει οριστεί πρίν π.χ +;; Αν ζητήσουμε μια μεταβλητή που δεν έχει οριστεί πριν π.χ.  (printf name)  ;; θα πάρουμε το παρακάτω μήνυμα  ;name: undefined;  ;  cannot reference undefined identifier  ;   context...: -;; Η τοπική δέσμευση : `me' δευσμεύεται με το "Bob" μόνο μέσα στο (let ...) +;; Η τοπική δέσμευση : `me' δεσμεύεται με το "Bob" μόνο μέσα στο (let ...)  (let ([me "Bob"])    "Alice"    me) ; => "Bob" @@ -156,7 +156,7 @@ my-pet ; => #<dog>  ;;; Λίστες  ;; Οι λίστες είναι linked-list δομές δεδομένων, -;; που έχουν δημιουργηθεί απο ζευγάρια 'cons' +;; που έχουν δημιουργηθεί από ζευγάρια 'cons'  ;; και τελειώνουν με 'null' (ή αλλιώς '()) για να  ;; δηλώσουν ότι αυτό είναι το τέλος της λίστας  (cons 1 (cons 2 (cons 3 null))) ; => '(1 2 3) @@ -191,12 +191,12 @@ my-pet ; => #<dog>  ;; Τα διανύσματα είναι πίνακες σταθερού μήκους  #(1 2 3) ; => '#(1 2 3) -;; Χρησιμοποιύμε το `vector-append' για να προσθέσουμε διανύσματα +;; Χρησιμοποιούμε το `vector-append' για να προσθέσουμε διανύσματα  (vector-append #(1 2 3) #(4 5 6)) ; => #(1 2 3 4 5 6)  ;;; Σύνολα -;; Δημιουργούμε ένα σύνολο απο μία λίστα +;; Δημιουργούμε ένα σύνολο από μία λίστα  (list->set '(1 2 3 1 2 3 3 2 1 3 2 1)) ; => (set 1 2 3)  ;; Προσθέτουμε έναν αριθμό στο σύνολο χρησιμοποιώντας το `set-add' @@ -214,10 +214,10 @@ my-pet ; => #<dog>  ;; Δημιουργήστε ένα αμετάβλητο πίνακα κατακερματισμού  (define m (hash 'a 1 'b 2 'c 3)) -;; Παίρνουμε μια τιμή απο τον πίνακα +;; Παίρνουμε μια τιμή από τον πίνακα  (hash-ref m 'a) ; => 1 -;; Άν ζητήσουμε μια τιμή που δέν υπάρχει παίρνουμε μία εξαίρεση +;; Αν ζητήσουμε μια τιμή που δεν υπάρχει παίρνουμε μία εξαίρεση  ; (hash-ref m 'd) => no value found for key  ;; Μπορούμε να δώσουμε μια default τιμή για τα κλειδιά που λείπουν @@ -234,7 +234,7 @@ m2 ; => '#hash((b . 2) (a . 1) (d . 4) (c . 3))  m ; => '#hash((b . 2) (a . 1) (c . 3))  <-- δεν υπάρχει `d'  ;; Χρησιμοποιούμε το `hash-remove' για να αφαιρέσουμε -;; κλειδία +;; κλειδιά  (hash-remove m 'a) ; => '#hash((b . 2) (c . 3))  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @@ -247,12 +247,12 @@ m ; => '#hash((b . 2) (a . 1) (c . 3))  <-- δεν υπάρχει `d'  ;; Μπορούμε επίσης να χρησιμοποιήσουμε το `λ'  (λ () "Hello World")     ; => Ίδια συνάρτηση -;; Χρησιμοποιύμε τις παρενθέσεις για να καλέσουμε όλες τις συναρτήσεις +;; Χρησιμοποιούμε τις παρενθέσεις για να καλέσουμε όλες τις συναρτήσεις  ;; συμπεριλαμβανομένων και των εκφράσεων 'λάμδα'  ((lambda () "Hello World")) ; => "Hello World"  ((λ () "Hello World"))      ; => "Hello World" -;; Εκχωρούμε σε μια μετάβλητη την συνάρτηση +;; Εκχωρούμε σε μια μεταβλητή την συνάρτηση  (define hello-world (lambda () "Hello World"))  (hello-world) ; => "Hello World" @@ -302,7 +302,7 @@ m ; => '#hash((b . 2) (a . 1) (c . 3))  <-- δεν υπάρχει `d'    (lambda (name . args)      (format "Hello ~a, you passed ~a extra args" name (length args)))) -;; Και με λέξεις κλειδία +;; Και με λέξεις κλειδιά  (define (hello-k #:name [name "World"] #:greeting [g "Hello"] . args)    (format "~a ~a, ~a extra args" g name (length args)))  (hello-k)                 ; => "Hello World, 0 extra args" @@ -347,7 +347,7 @@ m ; => '#hash((b . 2) (a . 1) (c . 3))  <-- δεν υπάρχει `d'  (eq? (string-append "foo" "bar") (string-append "foo" "bar")) ; => #f -;; Το `eqv?' υποστηρίζει την σύκριση αριθμών αλλα και χαρακτήρων +;; Το `eqv?' υποστηρίζει την σύγκριση αριθμών αλλά και χαρακτήρων  ;; Για άλλα ήδη μεταβλητών το `eqv?' και το `eq?' επιστρέφουν το ίδιο.  (eqv? 3 3.0)                                   ; => #f  (eqv? (expt 2 100) (expt 2 100))               ; => #t @@ -365,12 +365,12 @@ m ; => '#hash((b . 2) (a . 1) (c . 3))  <-- δεν υπάρχει `d'  (equal? (list 3) (list 3))                                       ; => #t  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; 5. Έλεχγος Ροής +;; 5. Έλεγχος Ροής  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;  ;;; Συνθήκες (conditionals) -(if #t               ; έκφραση ελέχγου +(if #t               ; έκφραση ελέγχου      "this is true"   ; έκφραση then      "this is false") ; έκφραση else  ; => "this is true" @@ -483,7 +483,7 @@ m ; => '#hash((b . 2) (a . 1) (c . 3))  <-- δεν υπάρχει `d'    (values i (number->string i)))  ; => '#hash((1 . "1") (2 . "2") (3 . "3")) -;; Υπάρχουν πολλά είδη απο προϋπάρχοντες τρόπους για να συλλέγουμε +;; Υπάρχουν πολλά είδη από προϋπάρχοντες τρόπους για να συλλέγουμε  ;; τιμές από τους βρόχους  (for/sum ([i 10]) (* i i)) ; => 285 @@ -491,7 +491,7 @@ m ; => '#hash((b . 2) (a . 1) (c . 3))  <-- δεν υπάρχει `d'  (for/and ([i 10] [j (in-range 10 20)]) (< i j)) ; => #t  (for/or ([i 10] [j (in-range 0 20 2)]) (= i j)) ; => #t -;; Και για να χρησιμοποιήσουμε ένα αφθαίρετο συνδιασμό χρησιμοποιούμε +;; Και για να χρησιμοποιήσουμε ένα αυθαίρετο συνδυασμό χρησιμοποιούμε  ;; το 'for/fold'  (for/fold ([sum 0]) ([i '(1 2 3 4)]) (+ sum i)) ; => 10 @@ -524,17 +524,17 @@ m ; => '#hash((b . 2) (a . 1) (c . 3))  <-- δεν υπάρχει `d'  (set! n (add1 n))  n ; => 6 -;; Χρησιμοποιούμε τα boxes για να δηλώσουμε ρητά ότι μια μεταβητή -;; θα είναι  mutable (θα μπορεί να αλλάξη η τιμή της) +;; Χρησιμοποιούμε τα boxes για να δηλώσουμε ρητά ότι μια μεταβλητή +;; θα είναι  mutable (θα μπορεί να αλλάξει η τιμή της)  ;; Αυτό είναι παρόμοιο με τους pointers σε άλλες γλώσσες  (define n* (box 5))  (set-box! n* (add1 (unbox n*)))  (unbox n*) ; => 6 -;; Πολλοί τύποι μεταβλητών στη Racket είναι αμετάβλητοι πχ τα ζεύγη, οι +;; Πολλοί τύποι μεταβλητών στη Racket είναι αμετάβλητοι π.χ. τα ζεύγη, οι  ;; λίστες κτλ. Άλλοι υπάρχουν και σε μεταβλητή και σε αμετάβλητη μορφή -;; πχ αλφαριθμητικά, διανύσματα κτλ +;; π.χ. αλφαριθμητικά, διανύσματα κτλ.  (define vec (vector 2 2 3 4))  (define wall (make-vector 100 'bottle-of-beer))  ;; Χρησιμοποιούμε το 'vector-set!' για να ανεώσουμε κάποια @@ -579,7 +579,7 @@ vec ; => #(1 2 3 4)      (printf fmt (make-string n ch))      (newline))) -;; Χρησιμοποιομε το 'require' για να πάρουμε όλα τα +;; Χρησιμοποιουμε το 'require' για να πάρουμε όλα τα  ;; παρεχόμενα ονόματα από μία ενότητα  (require 'cake) ; το ' είναι για τοπική υποενότητα  (print-cake 3) @@ -634,7 +634,7 @@ vec ; => #(1 2 3 4)  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;  ;; Οι μακροεντολές μας επιτρέπουν να επεκτείνουμε -;; το συντακτικό μιάς γλώσσας. +;; το συντακτικό μιας γλώσσας.  ;; Ας προσθέσουμε έναν βρόχο while  (define-syntax-rule (while condition body ...) @@ -664,20 +664,20 @@ vec ; => #(1 2 3 4)  ;;   (set! tmp other)  ;;   (set! other tmp_1)) -;; Αλλά ακόμα υπάρχουν ακόμη μετασχηματισμοί του κώδικα, π.χ: +;; Αλλά ακόμα υπάρχουν ακόμη μετασχηματισμοί του κώδικα, π.χ.:  (define-syntax-rule (bad-while condition body ...)    (when condition      body ...      (bad-while condition body ...))) -;; αυτή η μακροεντολή είναι χαλασμένη: δημιουγεί ατέρμονα βρόχο +;; αυτή η μακροεντολή είναι χαλασμένη: δημιουργεί ατέρμονα βρόχο  ;; και αν προσπαθήσουμε να το χρησιμοποιήσουμε, ο μεταγλωττιστής -;; θα μπεί στον ατέρμονα βρόχο. +;; θα μπει στον ατέρμονα βρόχο.  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;  ;; 10. Συμβόλαια (Contracts)  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; Τα συμβόλαια βάζουν περιορισμόυς σε τιμές που προέρχονται +;; Τα συμβόλαια βάζουν περιορισμούς σε τιμές που προέρχονται  ;; από ενότητες (modules)  (module bank-account racket    (provide (contract-out @@ -719,7 +719,7 @@ vec ; => #(1 2 3 4)  (displayln "Hola mundo" out-port)  (close-output-port out-port) -;; Διαβάζουμε απο αρχείο ξανά +;; Διαβάζουμε από αρχείο ξανά  (define in-port (open-input-file "/tmp/tmp.txt"))  (displayln (read-line in-port))  ; => "Hello World" diff --git a/el-gr/scala-gr.html.markdown b/el-gr/scala-gr.html.markdown index e29c7e70..415fda5c 100644 --- a/el-gr/scala-gr.html.markdown +++ b/el-gr/scala-gr.html.markdown @@ -40,7 +40,7 @@ Scala - Η επεκτάσιμη γλώσσα  /*    Τα σχόλια που επεκτείνονται σε πολλές γραμμές , όπως μπορείτε -  να δείτε , φαίνοται κάπως έτσι. +  να δείτε , φαίνονται κάπως έτσι.  */  // Εκτύπωση με νέα γραμμή στην επόμενη εκτύπωση @@ -59,12 +59,12 @@ var y = 10  y = 20  // το y είναι τώρα 20  /* -  Η Scala είναι στατικού τύπου γλώσσα, εν τούτις προσέξτε ότι στις παραπάνω +  Η Scala είναι στατικού τύπου γλώσσα, εν τούτοις προσέξτε ότι στις παραπάνω    δηλώσεις , δεν προσδιορίσαμε κάποιον τύπο. Αυτό συμβαίνει λόγω ενός    χαρακτηριστικού της Scala που λέγεται συμπερασματολογία τύπων. Στις     περισσότερες των περιπτώσεων, ο μεταγλωττιστής της Scala μπορεί να -  μαντέψει ποιός είναι ο τύπος μιας μεταβλητής. Μπορούμε να δηλώσουμε -  αναλυτικά τον τύπο μιάς μεταβλητής ως εξής: +  μαντέψει ποιος είναι ο τύπος μιας μεταβλητής. Μπορούμε να δηλώσουμε +  αναλυτικά τον τύπο μιας μεταβλητής ως εξής:  */  val z: Int = 10  val a: Double = 1.0 @@ -85,7 +85,7 @@ false  true == false // false  10 > 5 // true -// Η αριθμιτική είναι όπως τα συνηθισμένα +// Η αριθμητική είναι όπως τα συνηθισμένα  1 + 1 // 2  2 - 1 // 1  5 * 3 // 15 @@ -117,14 +117,14 @@ true == false // false  "Τα αλφαριθμητικά στην Scala περικλείονται από διπλά εισαγωγικά"  'a' // Ένας χαρακτήρας στην Scala  // res30: Char = a -// 'Αλφαριθημτικά με μονά εισαγωγικά δεν υφίστανται <= Αυτό θα προκαλέσει σφάλμα. +// Αλφαριθημτικά με μονά εισαγωγικά δεν υφίστανται <= Αυτό θα προκαλέσει σφάλμα.  // Τα αλφαριθμητικά έχουν τις συνηθισμένες μεθόδους της Java ορισμένες πάνω τους.  "hello world".length  "hello world".substring(2, 6)  "hello world".replace("C", "3") -// Έχουν επίσης μερικές επιπλένον μεθόδους Scala.  +// Έχουν επίσης μερικές επιπλέον μεθόδους Scala.   // Δείτε επίσης : scala.collection.immutable.StringOps  "hello world".take(5)  "hello world".drop(5) @@ -253,7 +253,7 @@ r foreach println  var i = 0  while (i < 10) {  println("i " + i); i+=1  } -while (i < 10) {  println("i " + i); i+=1  }   // Ναι ξανά! Τι συνέβει; Γιατί; +while (i < 10) {  println("i " + i); i+=1  }   // Ναι ξανά! Τι συνέβη; Γιατί;  i    // Εμφάνισε την τιμή του i. Σημειώστε ότι ένας βρόχος while είναι βρόχος       // με την κλασική έννοια - εκτελείται σειριακά καθώς αλλάζει η μεταβλητή @@ -268,8 +268,8 @@ do {  } while (x < 10)  // Η αναδρομή ουράς είναι ένας ιδιωματικός τρόπος να κάνεις επαναλαμβανόμενα -// πράγματα στην Scala. Οι αναδρομικές συναρτήσεις απαιτούν να γράφτεί  -// ρητά ο τύπος που θα επιστρέψουν , αλλιώς ο μεταγλωττιστής δεν μπορεί  +// πράγματα στην Scala. Οι αναδρομικές συναρτήσεις απαιτούν να γραφτεί  +// ρητά ο τύπος που θα επιστρέψουν, αλλιώς ο μεταγλωττιστής δεν μπορεί   // αλλιώς να τον συνάγει. Παρακάτω είναι μια συνάρτηση που επιστρέφει Unit.  def showNumbersInRange(a:Int, b:Int):Unit = {    print(a) @@ -332,7 +332,7 @@ s(1)  val divideInts = (x:Int, y:Int) => (x / y, x % y)  divideInts(10,3) // Η συνάρτηση divideInts επιστρέφει το αποτέλεσμα  -                 // της ακαίρεας διαίρεσης και το υπόλοιπο. +                 // της ακέραιας διαίρεσης και το υπόλοιπο.  // Για να έχουμε πρόσβαση στα στοιχεία μιας πλειάδας, χρησιμοποιούμε το _._n  // όπου το n είναι ο δείκτης με βάση το 1 του στοιχείου. @@ -349,7 +349,7 @@ d._2  /*    Ότι έχουμε κάνει ως τώρα σε αυτό το tutorial ήταν απλές εκφράσεις -  (τιμές , συναρτήσεις , κτλ). Αυτές οι εκφράσεις βολεύουν όταν τις +  (τιμές, συναρτήσεις, κτλ.). Αυτές οι εκφράσεις βολεύουν όταν τις    γράφουμε στο REPL για γρήγορες δοκιμές, αλλά δεν μπορούν να υπάρχουν    από μόνες τους σε ένα αρχείο Scala. Για παράδειγμα , δεν μπορούμε να    έχουμε μόνο ένα "val x = 5" στο αρχείο Scala. Αντί αυτού , τα μόνα @@ -394,7 +394,7 @@ println(mydog.bark) // => "Woof, woof!"  // αυτές καθ' αυτές, αλλά η συμπρεριφορά που σχετίζεται με όλα τα instances   // της κλάσης πάνε μέσα στο object. Η διαφορά είναι παρόμοια με τις  // μεθόδους κλάσεων σε σχέση με στατικές μεθόδους σε άλλες γλώσσες. -// Προσέξτε οτι τα objects και οι κλάσεις μπορούν να έχουν το ίδιο όνομα. +// Προσέξτε ότι τα objects και οι κλάσεις μπορούν να έχουν το ίδιο όνομα.  object Dog {    def allKnownBreeds = List("pitbull", "shepherd", "retriever")    def createDog(breed: String) = new Dog(breed) @@ -402,7 +402,7 @@ object Dog {  // Οι κλάσεις περίπτωσης (case classes) είναι που έχουν την επιπλέον   // λειτουργικότητα ενσωματωμένη. Μιά συνήθης ερώτηση για αρχάριους στην -// Scala είναι πότε να χρησιμοπούνται κλάσεις και πότε case κλάσεις. +// Scala είναι πότε να χρησιμοποιούνται κλάσεις και πότε case κλάσεις.  // Γενικά οι κλάσεις τείνουν να εστιάζουν στην ενθυλάκωση, τον  // πολυμορφισμό και τη συμπεριφορά. Οι τιμές μέσα σε αυτές τις κλάσεις   // τείνουν να είναι private , και μόνο οι μέθοδοι είναι εκτεθειμένες. @@ -411,7 +411,7 @@ object Dog {  // έχουν παρενέργειες.  case class Person(name: String, phoneNumber: String) -// Δημιουργία ενός instance. Πραρατηρήστε ότι τα case classes  +// Δημιουργία ενός instance. Παρατηρήστε ότι τα case classes   // δεν χρειάζονται την λέξη "new" .  val george = Person("George", "1234")  val kate = Person("Kate", "4567") @@ -419,7 +419,7 @@ val kate = Person("Kate", "4567")  // Με τα case classes, παίρνεις μερικά προνόμια δωρεάν , όπως:  george.phoneNumber  // => "1234" -// Ελέχγεται η ισότητα για κάθε πεδίο (δεν χρειάζεται να +// Ελέγχεται η ισότητα για κάθε πεδίο (δεν χρειάζεται να  // κάνουμε override στο .equals)  Person("George", "1234") == Person("Kate", "1236")  // => false @@ -509,7 +509,7 @@ List(1, 2, 3) map (x => x + 10)  // ένα όρισμα στην ανώνυμη συνάρτηση. Έτσι δεσμεύεται ως η μεταβλητή.  List(1, 2, 3) map (_ + 10) -// Αν το μπλόκ της ανώνυμης  συνάρτησης ΚΑΙ η συνάρτηση που εφαρμόζεται +// Αν το μπλοκ της ανώνυμης  συνάρτησης ΚΑΙ η συνάρτηση που εφαρμόζεται  // (στην περίπτωσή μας το foreach και το println) παίρνουν ένα όρισμα  // μπορείτε να παραλείψετε την κάτω παύλα.  List("Dom", "Bob", "Natalia") foreach println | 
