DedSec Project

elixir — συγκεντρωτικός οδηγός — DedSec Project

elixir — συγκεντρωτικός οδηγός Elixir Μοντέλο λειτουργίας Η Elixir τρέχει στην BEAM και προτιμά immutable values, pattern matching και concurrent processes. Παράδειγμα Δοκίμασέ το με νόημα…

Elixir

Μοντέλο λειτουργίας

Η Elixir τρέχει στην BEAM και προτιμά immutable values, pattern matching και concurrent processes.

Παράδειγμα

nums = [1, 2, 3]
Enum.map(nums, fn n -> n * 2 end)

Δοκίμασέ το με νόημα

Σύγκρινε Enum.map με lazy Stream.map και επιβεβαίωσε ότι η αρχική λίστα δεν αλλάζει.

Σφάλμα που πρέπει να ξεχωρίσεις

Τα concurrent messages είναι ασύγχρονα· χρησιμοποίησε receive patterns και timeouts στα tests.

Για να κρίνεις την άσκηση, κατέγραψε την αρχική είσοδο, την πρόβλεψη και την παρατήρηση σε πραγματικό, συμβατό περιβάλλον Elixir. Δώσε ξεχωριστό παράδειγμα όπου αλλάζει μόνο μία μεταβλητή ή ένα όρισμα. Αν εργάζεσαι χωρίς την αναγκαία εφαρμογή, μελέτησε τη σύνταξη ως παράδειγμα και μην παρουσιάζεις το κείμενο ως εκτελεσμένο test.

Elixir — Αναλυτικός οδηγός εξάσκησης

Ανάλυσε όλη την είσοδο

Δημιούργησε προσωρινό αρχείο parse_scores.exs όπου η επιτυχία και η αποτυχία έχουν διαφορετικές μορφές:

defmodule Score do
  def parse(text) do
    case Integer.parse(text) do
      {n, ""} -> {:ok, n}
      _ -> {:error, :invalid_integer}
    end
  end
end
IO.inspect(Score.parse("12"))
IO.inspect(Score.parse("bad"))
IO.inspect(Score.parse("12x"))

Αναμένονται {:ok, 12} και δύο φορές {:error, :invalid_integer}. Η Integer.parse μπορεί να αναγνωρίσει αριθμητικό πρόθεμα στο "12x", όμως η άσκηση απαιτεί να μην απομένει κείμενο. Πρόκειται για επιλογή επικύρωσης πεδίου και όχι απλώς για συντακτική λεπτομέρεια. Δοκίμασε elixir parse_scores.exs και κατέγραψε εκδόσεις Elixir/OTP· δεν έχουμε πραγματική εκτέλεση εδώ.

Pattern matching και απόφαση

Το case ταιριάζει την τιμή με συγκεκριμένα μοτίβα tuple. Άλλαξε δοκιμαστικά τον επιτυχή κανόνα ώστε να δέχεται οποιοδήποτε υπόλοιπο και εξήγησε γιατί τότε περνά το "12x". Δοκίμασε "0", "-3" και κενή συμβολοσειρά. Ξεχώρισε αριθμητικά έγκυρο μηδέν από αποτυχία. Ένας γενικός χειριστής εξαιρέσεων που επιστρέφει πάντα 0 θα κατέστρεφε αυτή τη διάκριση.

Καταμέτρηση αμετάβλητων δεδομένων

Εκτέλεσε Enum.frequencies(["ada", "lin", "ada"]) και σύγκρινε με %{"ada" => 2, "lin" => 1}. Για χάρτες η ουσία είναι οι συσχετισμοί κλειδιών και τιμών, όχι η σειρά εμφάνισης. Πρόσθεσε διαφορετικά πεζά/κεφαλαία και όρισε αν απαιτείται ρητή κανονικοποίηση.

Ανεξάρτητη άσκηση

Φτιάξε ExUnit tests για όλες τις περιπτώσεις, συμπεριλαμβανομένης εισόδου που δεν είναι String. Αποφάσισε αν για λάθος τύπο η συνάρτηση επιστρέφει tuple αποτυχίας ή πετά εξαίρεση, και κράτησε συνεπή συμπεριφορά. Εξήγησε τη διαφορά ανάμεσα σε αμετάβλητους χάρτες, pattern matching και μεταβολή κοινού μετρητή. Αναφορά: https://hexdocs.pm/elixir/

Elixir — Παραδείγματα πραγματικού κώδικα

Εκτέλεση των παραδειγμάτων

Τα παραδείγματα είναι μικρά και αυτοτελή. Χρησιμοποίησε τη σχετική εγκατεστημένη γλώσσα. Ενδεικτικά: elixir {file}. Μη συγχέεις τα ονόματα αρχείων με αυτόματη εγκατάσταση. Δούλεψε σε δοκιμαστικό φάκελο.

Elixir — Τεχνικά σημεία και συχνές παγίδες

Τεχνική γνώση

  1. Η αμετάβλητη κατάσταση και το pattern matching είναι βασικά χαρακτηριστικά.
  2. Ελαφριές διεργασίες ανταλλάσσουν μηνύματα και δεν είναι νήματα λειτουργικού.
  3. Η επίβλεψη οργανώνει επανεκκινήσεις· δεν πρέπει να κρύβει επαναλαμβανόμενα σφάλματα.