Η πρώτη άσκηση σε κάθε track είναι μια πολύ απλή άσκηση "Hello, World!".
Ο σκοπός αυτής της άσκησης είναι να επιβεβαιώσεις γρήγορα ότι όλα είναι συνδεδεμένα σωστά. Αυτό θα επιβεβαιώσει ότι ο χρήστης έχει εγκαταστήσει σωστά το περιβάλλον προγραμματισμού, ότι ξέρει πώς να τρέξει τις δοκιμές και ότι μπορεί να τις κάνει να περάσουν. Πέρα από αυτό, στην περίπτωση του πελάτη γραμμής εντολών του Exercism (CLI), διασφαλίζει επίσης ότι ο χρήστης έχει εγκαταστήσει και ρυθμίσει σωστά το CLI, καθώς και ότι ο ιστότοπος παραδίδει τα σωστά αρχεία για την άσκηση χωρίς να παραδίδει περιττά artifacts. Τέλος, διασφαλίζει ότι ο χρήστης είναι εξοικειωμένος με τον κύκλο: κατεβάζει μια άσκηση με το CLI, λύνει το πρόβλημα στο τοπικό περιβάλλον ανάπτυξης και υποβάλλει τη λύση του πίσω στον ιστότοπο.
Με άλλα λόγια, δεν έχει να κάνει ακόμη με το να μάθεις κάτι για την ίδια τη γλώσσα. Ο στόχος είναι κάτι πανεύκολο.
Αυτό είναι επίσης, κατά πάσα πιθανότητα, το πιο δύσκολο κομμάτι του να στήσεις σωστά το αποθετήριο του track, καθώς υπάρχουν πολλά κινούμενα μέρη στην υλοποίηση μιας άσκησης.
Στην άσκηση "Hello, World!" εφαρμόζονται μερικοί ειδικοί κανόνες:
prerequisites
practices
Η άσκηση "Hello, World!" (και βασικά όλες οι ασκήσεις στο Exercism) απαιτεί ένα συγκεκριμένο σύνολο αρχείων:
Πριν δημιουργήσουμε την άσκηση "Hello, World!", πρέπει να πάρεις κάποιες αποφάσεις για τα ονόματα αρχείων και τις διαδρομές αρχείων που είναι ειδικά για το track (σουίτα δοκιμών, υλοποίηση stub, παραδειγματική υλοποίηση και τυχόν πρόσθετα αρχεία).
Ο γενικός κανόνας είναι να χρησιμοποιείς ονόματα που είναι ιδιωματικά για τη γλώσσα.
Όπου δεν υπάρχουν ισχυρές προτιμήσεις, προτίμησε πιο ρηχές δομές καταλόγων.
Η παραδειγματική υλοποίηση θα πρέπει να είναι αναγνωρίσιμη από το script του CI, οπότε καλό είναι να διαλέξεις ένα γενικό basename που μπορούν να χρησιμοποιήσουν όλες οι ασκήσεις, π.χ. example, sample ή reference-solution.
Αφού διαλέξεις τις διαδρομές αρχείων που είναι ειδικές για το track, θα πρέπει να τις ρυθμίσεις στο κλειδί files του ριζικού αρχείου config.json.
Το κλειδί files θα χρησιμεύσει ως πρότυπο για όλες τις ασκήσεις, κάτι που επιτρέπει σε οποιοδήποτε εργαλείο (μερικά από τα οποία θα χρησιμοποιήσουμε σε λίγο) να ξέρει πού να αναζητήσει αρχεία.
Μπορείς να χρησιμοποιήσεις διάφορα placeholders για να ρυθμίζεις εύκολα το slug της άσκησης (hello-world σε αυτή την περίπτωση).
Αν το track σου χρησιμοποιεί PascalCase για τα αρχεία του, το κλειδί files μπορεί να μοιάζει κάπως έτσι:
"files": {
"solution": [
"%{pascal_slug}.cs"
],
"test": [
"%{pascal_slug}Tests.cs"
],
"example": [
".meta/Example.cs"
]
}
Τα αρχεία παραδείγματος θα πρέπει να αποθηκεύονται μέσα στον κατάλογο .meta.
Για περισσότερες πληροφορίες, δες την τεκμηρίωση του κλειδιού files.
Αφού ορίσεις τα πρότυπα των διαδρομών αρχείων, μπορείς να στήσεις γρήγορα τον σκελετό των αρχείων της άσκησης "Hello, World!" τρέχοντας τις παρακάτω εντολές από τον ριζικό κατάλογο του track:
bin/fetch-configlet
bin/configlet create --practice-exercise hello-world
Για να σε εμφανίζει ο ιστότοπος ως δημιουργό της άσκησης, ακολούθησε αυτά τα βήματα:
Μέσα στο αρχείο .meta/config.json της άσκησης:
authors
Για να λειτουργήσει αυτό, θα πρέπει να συνδέσεις τον λογαριασμό σου στο Exercism με το GitHub. Μπορείς να το κάνεις αυτό στον ιστότοπο, στην ενότητα Ενσωματώσεις της σελίδας Ρυθμίσεις.
Οι δημιουργοί ασκήσεων κερδίζουν επίσης φήμη
Τα νεότερα αποθετήρια track μπορούν να χρησιμοποιήσουν το script bin/add-practice-exercise (πηγή) για να προσθέσουν νέες ασκήσεις:
bin/add-exercise -a <github_username> two-fer
Αν δουλεύεις σε ένα αποθετήριο track που δεν έχει αυτό το αρχείο, μπορείς άφοβα να τα αντιγράψεις στο αποθετήριό σου χρησιμοποιώντας τον παραπάνω σύνδεσμο προς την πηγή.
Μόλις δημιουργηθούν τα αρχεία του σκελετού, θα πρέπει να:
Βασικό κομμάτι του να προσθέσεις μια άσκηση είναι να προσθέσεις δοκιμές. Χοντρικά μιλώντας, υπάρχουν δύο επιλογές όταν υλοποιείς μία από τις παραπάνω ασκήσεις:
canonical-data.json της άσκησης
https://exercism.org/exercises/hello-world για να δεις ποια track έχουν υλοποιήσει μια συγκεκριμένη άσκηση).Για την άσκηση "Hello, World!" θα υπάρχει μόνο μία περίπτωση δοκιμής, οπότε και οι δύο επιλογές θα πρέπει να είναι εντάξει.
Το αρχείο της παραδειγματικής υλοποίησης θα πρέπει να περιέχει τον κώδικα που απαιτείται για να περάσουν οι δοκιμές.
Το αρχείο stub θα πρέπει να έχει μια σχεδόν λειτουργική λύση για τις δοκιμές, αλλά με το κείμενο "Hello, World!" να αντικαθίσταται από το "Goodbye, Mars!". Συμβουλή: μπορείς απλώς να κάνεις αντιγραφή-επικόλληση και να τροποποιήσεις την παραδειγματική λύση.
Μόλις τελειώσεις με την άσκηση, πρόσθεσε το όνομα χρήστη σου στο GitHub στον πίνακα "authors" του αρχείου .meta/config.json της άσκησης.
Έτσι θα διασφαλίσουμε ότι θα αναγνωρίζεσαι σωστά ως δημιουργός της άσκησης.
Για να επιβεβαιώσεις ότι η άσκηση έχει στηθεί σωστά, μπορείς να χρησιμοποιήσεις τη λειτουργία linting που είναι ενσωματωμένη στο εργαλείο configlet.
Το πρώτο βήμα είναι να κατεβάσεις το εργαλείο configlet, για το οποίο έχουμε δημιουργήσει δύο scripts:
bin/fetch-configlet: τρέξε το όταν χρησιμοποιείς *nix ή macOSbin/fetch-configlet.ps1: τρέξε το όταν χρησιμοποιείς WindowsΤρέχοντας ένα από αυτά τα scripts από τον ριζικό κατάλογο του αποθετηρίου του track, θα κατεβάσεις το εκτελέσιμο bin/configlet ή bin/configlet.exe αντίστοιχα.
Στη συνέχεια, μπορείς να ελέγξεις την ορθότητα της άσκησης τρέχοντας το bin/configlet lint.
Είναι πιθανό το configlet να αναφέρει το παρακάτω σφάλμα:
The `tags` array is empty:
/path/to/track/config.json
Αυτό το σφάλμα θα διορθωθεί στο βήμα Προετοιμασία για κυκλοφορία, οπότε είτε:
Το workflow του configlet θα τρέχει αυτόματα το configlet lint κάθε φορά που γίνεται push στο main ή σε ένα pull request.