Ο τύπος char της F# είναι μια τιμή 16 bit που αναπαριστά τα μικρότερα διευθυνσιοδοτήσιμα components του κειμένου και είναι αμετάβλητος εξ ορισμού.
Τα char ορίζονται ως κυριολεκτικά με μονά εισαγωγικά:
let ch = 'A'
// => val ch: char = 'A'
Οι συμβολοσειρές είναι μια ακολουθία από χαρακτήρες.
Μπορείς να πάρεις έναν μεμονωμένο char από μια συμβολοσειρά με θέσεις (μηδενικής βάσης):
"Exercism"[4] // => 'c'
Η επανάληψη πάνω σε μια συμβολοσειρά επιστρέφει ένα char σε κάθε βήμα.
Το επόμενο παράδειγμα χρησιμοποιεί μια συνάρτηση υψηλότερης τάξης και μια ανώνυμη συνάρτηση, για ευκολία. Αυτές θα καλυφθούν κανονικά αργότερα στο πρόγραμμα σπουδών, αλλά για την ώρα είναι ουσιαστικά ένας συνοπτικός τρόπος να γράψεις έναν βρόχο πάνω στους χαρακτήρες μιας συμβολοσειράς.
Seq.map (fun c -> c, int c) "F#" // => [('F', 70); ('#', 35)]
Όπως φαίνεται παραπάνω, ένα char μπορεί να μετατραπεί στην int τιμή του.
Αυτό λειτουργεί επίσης (τουλάχιστον μερικές φορές) και για άλλα συστήματα γραφής:
Seq.map (fun c -> c, int c) "東京" // => [('東', 26481); ('京', 20140)]
Το υποκείμενο Int16 χρησιμοποιείται όταν συγκρίνεις χαρακτήρες:
'A' < 'D' // => true
Επίσης, ένα int μπορεί να μετατραπεί σε char:
char 77 // => 'M'
Η βιβλιοθήκη System.Char περιέχει το πλήρες σύνολο των μεθόδων που αναμένονται από μια γλώσσα .NET, όπως μετατροπές σε κεφαλαία/πεζά:
'a' |> System.Char.ToUpper // => 'A'
'Q' |> System.Char.ToLower // => 'q'
Σε αυτή την άσκηση θα υλοποιήσεις ένα μέρος από βοηθητικές ρουτίνες που βοηθούν έναν προγραμματιστή να καθαρίσει ονόματα αναγνωριστικών.
Στις 6 εργασίες θα χτίσεις σταδιακά τις συναρτήσεις transform, που μετατρέπει μεμονωμένους χαρακτήρες, και clean, που μετατρέπει συμβολοσειρές.
Ένα έγκυρο αναγνωριστικό αποτελείται από μηδέν ή περισσότερα γράμματα, κάτω παύλες, παύλες, ερωτηματικά και emoji.
Αν περάσεις μια κενή συμβολοσειρά στη συνάρτηση clean, θα πρέπει να επιστρέφεται μια κενή συμβολοσειρά.
Υλοποίησε τη συνάρτηση transform ώστε να αντικαθιστά κάθε παύλα με κάτω παύλα.
transform '-' // => "_"
Αφαίρεσε όλους τους χαρακτήρες κενού διαστήματος. Αυτό περιλαμβάνει τα κενά στην αρχή και στο τέλος.
transform ' ' // => ""
Τροποποίησε τη συνάρτηση transform ώστε να μετατρέπει το camelCase σε kebab-case
transform 'D' // => "-d"
Τροποποίησε τη συνάρτηση transform ώστε να παραλείπει κάθε χαρακτήρα που είναι αριθμητικός.
transform '7' // => ""
Τροποποίησε τη συνάρτηση transform ώστε να αντικαθιστά κάθε ελληνικό γράμμα στο εύρος από 'α' έως 'ω'.
transform 'β' // => "?"
Υλοποίησε τη συνάρτηση clean ώστε να εφαρμόζει αυτές τις πράξεις σε ολόκληρη τη συμβολοσειρά.
Οι χαρακτήρες που βρίσκονται έξω από τους κανόνες θα πρέπει να περνούν αναλλοίωτοι.
clean " a2b Cd-ω😀 " // => "ab-cd_?😀"
Αυτό το θέμα θα καλυφθεί αναλυτικά αργότερα στο πρόγραμμα σπουδών.
Για την ώρα, μπορεί να σου φανεί χρήσιμο να ξέρεις ότι υπάρχει μια συνάρτηση υψηλότερης τάξης που ονομάζεται String.collect και μετατρέπει μια συλλογή από chars σε συμβολοσειρά, χρησιμοποιώντας μια συνάρτηση που δίνεις εσύ.
let transform ch = $"{ch}_"
String.collect transform "abc" // => "a_b_c_"
Γράψου στο Exercism για να μάθεις και να κατακτήσεις F# με 18 έννοιες148 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.