Τα guards χρησιμοποιούνται ως συμπλήρωμα της αντιστοίχισης προτύπων. Επιτρέπουν πιο σύνθετους ελέγχους. Μπορούν να χρησιμοποιηθούν σε κάποιες, αλλά όχι όλες τις περιπτώσεις όπου μπορεί να χρησιμοποιηθεί η αντιστοίχιση προτύπων, για παράδειγμα σε ρήτρες συναρτήσεων ή ρήτρες case.
def empty?(list) when is_list(list) and length(list) == 0 do
true
end
Τα guards ξεκινούν με τη λέξη-κλειδί when, την οποία ακολουθεί μια έκφραση Boolean.
Οι εκφράσεις των guards είναι ειδικές συναρτήσεις που:
true ή false.Στην τεκμηρίωση της Elixir θα βρεις μια λίστα με τα πιο συνηθισμένα guards. Περιλαμβάνουν:
Μπορείς να ορίσεις το δικό σου guard με το defguard.
Σύμφωνα με τη σύμβαση ονοματοδοσίας της Elixir, τα ονόματα των guards πρέπει να ξεκινούν με is_.
defmodule HTTP do
defguard is_success(code) when code >= 200 and code < 300
def handle_response(code) when is_success(code) do
:ok
end
end