Πρόσθεσε την πρώτη άσκηση


Η πρώτη άσκηση σε κάθε track είναι μια πολύ απλή άσκηση "Hello, World!".

Ο σκοπός αυτής της άσκησης είναι να επιβεβαιώσεις γρήγορα ότι όλα είναι συνδεδεμένα σωστά. Αυτό θα επιβεβαιώσει ότι ο χρήστης έχει εγκαταστήσει σωστά το περιβάλλον προγραμματισμού, ότι ξέρει πώς να τρέξει τις δοκιμές και ότι μπορεί να τις κάνει να περάσουν. Πέρα από αυτό, στην περίπτωση του πελάτη γραμμής εντολών του Exercism (CLI), διασφαλίζει επίσης ότι ο χρήστης έχει εγκαταστήσει και ρυθμίσει σωστά το CLI, καθώς και ότι ο ιστότοπος παραδίδει τα σωστά αρχεία για την άσκηση χωρίς να παραδίδει περιττά artifacts. Τέλος, διασφαλίζει ότι ο χρήστης είναι εξοικειωμένος με τον κύκλο: κατεβάζει μια άσκηση με το CLI, λύνει το πρόβλημα στο τοπικό περιβάλλον ανάπτυξης και υποβάλλει τη λύση του πίσω στον ιστότοπο.

Με άλλα λόγια, δεν έχει να κάνει ακόμη με το να μάθεις κάτι για την ίδια τη γλώσσα. Ο στόχος είναι κάτι πανεύκολο.

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

Υλοποίηση της άσκησης

Στην άσκηση "Hello, World!" εφαρμόζονται μερικοί ειδικοί κανόνες:

  • Είναι πάντα η πρώτη άσκηση σε ένα track
  • Κάθε track πρέπει να την υλοποιεί
  • Το αρχείο δοκιμών έχει μόνο μία δοκιμή
  • Το αρχείο stub περιέχει μια σχεδόν λειτουργική υλοποίηση, αλλά αντί για "Hello, World!" χρησιμοποιεί "Goodbye, Mars!"
  • Δεν έχει prerequisites
  • Δεν έχει practices

Καθόρισε τις διαδρομές αρχείων

Η άσκηση "Hello, World!" (και βασικά όλες οι ασκήσεις στο Exercism) απαιτεί ένα συγκεκριμένο σύνολο αρχείων:

  • Τεκμηρίωση: εξηγεί στον μαθητή τι πρέπει να κάνει (μπορεί να δημιουργηθεί αυτόματα).
  • Μεταδεδομένα: παρέχουν στο Exercism κάποια μεταδεδομένα για την άσκηση (μπορούν να δημιουργηθούν ως επί το πλείστον αυτόματα).
  • Σουίτα δοκιμών: επιβεβαιώνει την ορθότητα μιας λύσης (ειδική για κάθε track).
  • Υλοποίηση stub: παρέχει ένα σημείο εκκίνησης για τους μαθητές (ειδική για κάθε track).
  • Παραδειγματική υλοποίηση: παρέχει μια υλοποίηση-παράδειγμα που περνάει όλες τις δοκιμές (ειδική για κάθε track).
  • Πρόσθετα αρχεία: διασφαλίζουν ότι οι δοκιμές μπορούν να τρέξουν (ειδικά για κάθε track, προαιρετικά).

Πριν δημιουργήσουμε την άσκηση "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"
  ]
}
Note

Τα αρχεία παραδείγματος θα πρέπει να αποθηκεύονται μέσα στον κατάλογο .meta.

Για περισσότερες πληροφορίες, δες την τεκμηρίωση του κλειδιού files.

Δημιουργία των αρχείων

Αφού ορίσεις τα πρότυπα των διαδρομών αρχείων, μπορείς να στήσεις γρήγορα τον σκελετό των αρχείων της άσκησης "Hello, World!" τρέχοντας τις παρακάτω εντολές από τον ριζικό κατάλογο του track:

bin/fetch-configlet
bin/configlet create --practice-exercise hello-world

Όρισε τον δημιουργό

Για να σε εμφανίζει ο ιστότοπος ως δημιουργό της άσκησης, ακολούθησε αυτά τα βήματα:

Μέσα στο αρχείο .meta/config.json της άσκησης:

  • Πρόσθεσε το όνομα χρήστη σου στο GitHub στο κλειδί authors

Για να λειτουργήσει αυτό, θα πρέπει να συνδέσεις τον λογαριασμό σου στο Exercism με το GitHub. Μπορείς να το κάνεις αυτό στον ιστότοπο, στην ενότητα Ενσωματώσεις της σελίδας Ρυθμίσεις.

Note

Οι δημιουργοί ασκήσεων κερδίζουν επίσης φήμη

Χρησιμοποίησε το script

Τα νεότερα αποθετήρια track μπορούν να χρησιμοποιήσουν το script bin/add-practice-exercise (πηγή) για να προσθέσουν νέες ασκήσεις:

bin/add-exercise -a <github_username> two-fer
Note

Αν δουλεύεις σε ένα αποθετήριο track που δεν έχει αυτό το αρχείο, μπορείς άφοβα να τα αντιγράψεις στο αποθετήριό σου χρησιμοποιώντας τον παραπάνω σύνδεσμο προς την πηγή.

Υλοποίησε την άσκηση

Μόλις δημιουργηθούν τα αρχεία του σκελετού, θα πρέπει να:

  • Προσθέσεις δοκιμές στο αρχείο δοκιμών
  • Προσθέσεις μια παραδειγματική υλοποίηση
  • Ορίσεις το περιεχόμενο του αρχείου stub

Πρόσθεσε δοκιμές

Βασικό κομμάτι του να προσθέσεις μια άσκηση είναι να προσθέσεις δοκιμές. Χοντρικά μιλώντας, υπάρχουν δύο επιλογές όταν υλοποιείς μία από τις παραπάνω ασκήσεις:

  1. Να υλοποιήσεις τις δοκιμές από το μηδέν, χρησιμοποιώντας τις περιπτώσεις δοκιμών από το canonical-data.json της άσκησης
  2. Να μεταφέρεις τις δοκιμές από την υλοποίηση ενός άλλου track (συμβουλή: πήγαινε στο https://exercism.org/exercises/hello-world για να δεις ποια track έχουν υλοποιήσει μια συγκεκριμένη άσκηση).

Για την άσκηση "Hello, World!" θα υπάρχει μόνο μία περίπτωση δοκιμής, οπότε και οι δύο επιλογές θα πρέπει να είναι εντάξει.

Πρόσθεσε παραδειγματική υλοποίηση

Το αρχείο της παραδειγματικής υλοποίησης θα πρέπει να περιέχει τον κώδικα που απαιτείται για να περάσουν οι δοκιμές.

Όρισε το stub

Το αρχείο stub θα πρέπει να έχει μια σχεδόν λειτουργική λύση για τις δοκιμές, αλλά με το κείμενο "Hello, World!" να αντικαθίσταται από το "Goodbye, Mars!". Συμβουλή: μπορείς απλώς να κάνεις αντιγραφή-επικόλληση και να τροποποιήσεις την παραδειγματική λύση.

Ενημέρωσε τους δημιουργούς της άσκησης

Μόλις τελειώσεις με την άσκηση, πρόσθεσε το όνομα χρήστη σου στο GitHub στον πίνακα "authors" του αρχείου .meta/config.json της άσκησης. Έτσι θα διασφαλίσουμε ότι θα αναγνωρίζεσαι σωστά ως δημιουργός της άσκησης.

Έλεγχος με linting

Για να επιβεβαιώσεις ότι η άσκηση έχει στηθεί σωστά, μπορείς να χρησιμοποιήσεις τη λειτουργία linting που είναι ενσωματωμένη στο εργαλείο configlet.

Το πρώτο βήμα είναι να κατεβάσεις το εργαλείο configlet, για το οποίο έχουμε δημιουργήσει δύο scripts:

  • bin/fetch-configlet: τρέξε το όταν χρησιμοποιείς *nix ή macOS
  • bin/fetch-configlet.ps1: τρέξε το όταν χρησιμοποιείς Windows

Τρέχοντας ένα από αυτά τα scripts από τον ριζικό κατάλογο του αποθετηρίου του track, θα κατεβάσεις το εκτελέσιμο bin/configlet ή bin/configlet.exe αντίστοιχα.

Στη συνέχεια, μπορείς να ελέγξεις την ορθότητα της άσκησης τρέχοντας το bin/configlet lint.

Note

Είναι πιθανό το configlet να αναφέρει το παρακάτω σφάλμα:

The `tags` array is empty:
/path/to/track/config.json

Αυτό το σφάλμα θα διορθωθεί στο βήμα Προετοιμασία για κυκλοφορία, οπότε είτε:

  • αγνόησε το σφάλμα (για την ώρα), ή
  • διόρθωσε το σφάλμα προσθέτοντας tags
Note

Το workflow του configlet θα τρέχει αυτόματα το configlet lint κάθε φορά που γίνεται push στο main ή σε ένα pull request.