Titkok

Titkok

Tanulófeladat

Bevezetés

Névtelen függvények

Az Elixirben a függvények első osztályú állampolgárok. Ez a következőket jelenti:

  • A nevesített és a névtelen függvényeket változókhoz lehet rendelni.
  • A nevesített és a névtelen függvényeket adatként lehet továbbadni, akár argumentumként, akár visszatérési értékként.
  • A névtelen függvények dinamikusan létrehozhatók.

A névtelen függvényeknek a nevesített függvényekkel ellentétben nincs statikus hivatkozásuk, csak akkor érhetők el, ha egy változóhoz rendeljük őket, vagy ha azonnal meghívjuk őket.

A névtelen függvényeket például arra használhatjuk, hogy:

  • Adatokat rejtsünk el lexikális scope-pal (más néven closure).
  • Dinamikusan hozzunk létre függvényeket futásidőben.

A névtelen függvények a fn fenntartott szóval kezdődnek, az argumentumokat a -> token választja el a függvény törzsétől, és egy end zárja le őket. A nevesített függvényekhez hasonlóan a függvény utolsó kifejezése implicit módon visszaadódik a hívó függvénynek.

Egy függvényhivatkozás meghívásához egy .-ot kell tenned a hivatkozást tartalmazó változó és az argumentumok listája közé:

function_variable = fn param ->
  param + 1
end

function_variable.(1)
# => 2

Akár a rövidített capture-jelölést is használhatod, hogy ez még tömörebb legyen:

variable = &(&1 + 1)

variable.(1)
# => 2

Bitmanipuláció

Az Elixir sok függvényt kínál a bitekkel való munkához, ezek a Bitwise modulban találhatók.

  • band/2: bitenkénti AND
  • bsl/2: bitenkénti SHIFT LEFT
  • bsr/2: bitenkénti SHIFT RIGHT
  • bxor/2: bitenkénti XOR
  • bor/2: bitenkénti OR
  • bnot/1: bitenkénti NOT

Íme egy példa egy bitenkénti függvény használatára:

Bitwise.bsl(1, 3)
# => 8

Minden bitenkénti függvény csak egész számokkal működik.

Ha 1.9-es vagy annál régebbi Elixir-verziót használsz, a modul definíciójának elején meg kell hívnod a require Bitwise-ot, hogy használhasd a Bitwise modult.

Utasítások

Ebben a feladatban egy olyan titkosító eszköz szoftverét kell megírnod, amely adatok átalakításával működik. Szükséged van egy módszerre, amellyel egyszerűbb függvények összekapcsolásával rugalmasan hozhatsz létre bonyolult függvényeket.

Minden részfeladatnál adj vissza egy névtelen függvényt, amelyet a hívó scope-ból meg lehet hívni.

Minden függvény egész szám típusú argumentumot várjon. Az egész számok Elixirben bitenkénti műveletek végzésére is alkalmasak.

1. Készíts egy összeadót

Valósítsd meg a Secrets.secret_add/1 függvényt. A függvény adjon vissza egy olyan függvényt, amely egy argumentumot kap, és hozzáadja ehhez a secret_add-nak átadott argumentumot.

adder = Secrets.secret_add(3)
adder.(2)
# => 5

2. Készíts egy kivonót

Valósítsd meg a Secrets.secret_subtract/1 függvényt. A függvény adjon vissza egy olyan függvényt, amely egy argumentumot kap, és abból kivonja a secret_subtract-nak átadott titkot.

subtractor = Secrets.secret_subtract(2)
subtractor.(3)
# => 1

3. Készíts egy szorzót

Valósítsd meg a Secrets.secret_multiply/1 függvényt. A függvény adjon vissza egy olyan függvényt, amely egy argumentumot kap, és megszorozza a secret_multiply-nak átadott titokkal.

multiplier = Secrets.secret_multiply(7)
multiplier.(3)
# => 21

4. Készíts egy osztót

Valósítsd meg a Secrets.secret_divide/1 függvényt. A függvény adjon vissza egy olyan függvényt, amely egy argumentumot kap, és elosztja a secret_divide-nak átadott titokkal.

divider = Secrets.secret_divide(3)
divider.(32)
# => 10

Használj egész számok közötti osztást, hogy a kimenet kompatibilis legyen a többi függvény várt bemenetével.

5. Készíts egy „and” műveletet végző függvényt

Valósítsd meg a Secrets.secret_and/1 függvényt. A függvény adjon vissza egy olyan függvényt, amely egy argumentumot kap, és bitenkénti and műveletet végez rajta és a secret_and-nak átadott titkon.

ander = Secrets.secret_and(1)
ander.(2)
# => 0

6. Készíts egy „xor” műveletet végző függvényt

Valósítsd meg a Secrets.secret_xor/1 függvényt. A függvény adjon vissza egy olyan függvényt, amely egy argumentumot kap, és bitenkénti xor műveletet végez rajta és a secret_xor-nak átadott titkon.

xorer = Secrets.secret_xor(1)
xorer.(3)
# => 2

7. Készíts egy függvényösszekapcsolót

Valósítsd meg a Secrets.secret_combine/2 függvényt. A függvény adjon vissza egy olyan függvényt, amely egy argumentumot kap, és sorrendben alkalmazza rá a secret_combine-nak átadott két függvényt.

add_one = Secrets.secret_add(1)
multiply_by_2 = Secrets.secret_multiply(2)
combined = Secrets.secret_combine(add_one, multiply_by_2)

combined.(3)
# => 8
Szerkesztés GitHubon A hivatkozás új ablakban vagy lapon nyílik meg
Elixir Exercism

Készen állsz elkezdeni a(z) Titkok feladatot?

Iratkozz fel az Exercism-re, hogy megtanuld és elsajátítsd a(z) Elixir nyelvet 58 fogalom168 feladat segítségével, valódi emberi mentorálással, mindez ingyen.