Proměnné

Zadáno v úterý 8. 9.

K odevzdání v pondělí 14. 9.

Získat můžete až 7 bodů

Tento úkol slouží k procvičení proměnných.

Zadání

Zadání má dvě části. První se skládá ze tří otázek na teorii, druhá je praktická.

Teoretická část (5 bodů)

Odpovězte na následující otázky:

  1. (2 body) Jaký by byl typ fiktivní funkce repeat, u níž se v dokumentaci píše
repeat(n, txt)
Repeats the given text txt n-times and returns the result as one word.

Napište jej pomocí standartního typového zápisu (tj. za použití :: atp).

Hint: "Funkce" je formální název pro "krabice", o kterých jsme si povídali na hodině; funkce jsou zkrátka kus kódu, který za použití daných vstupů vyrobí nějaký výstup. Příkladem funkce je circle, +, nebo below — a všechno ostatní, co jsme psali tímto zápisem: f(input1, input2, ..., inputX).

  1. (1 bod) Co by mohla dělat funkce s typem
line(
  aX :: Number,
  aY :: Number,
  bX :: Number,
  bY :: Number) -> Image
  1. (2 body) Ve většině jazyků se ve jménech proměnných nesmí vyskytovat mezery, liší se ale způsoby, jakým se v nich značí jednotlivá slova. Nejčastější způsoby oddělení slov jsou:
thisIsCamelCase (Java, C, C#, Haskell, ...)
this_is_snake_case (Python)
this-is-kebab-case (LISP, Pyret)

Proč myslíte, že se kebab-case ve většině jazyků nepoužívá? Jak je tento důvod ošetřený v Pyretu?

Hint: nejedná se jen o estetické rozhodnutí.

Praktická část (2 body)

Přepište jednu ze svých vlajek za použití proměnných — za co přesně dosadíte proměnné, a co necháte být, nechám na vás. Snažte se o co nejlepší čitelnost výsledného programu, čitelnost je důležitější než nízký počet řádků.

Příklad:

# Before
above(
  rectangle(50, 10,"solid","red"),
  above(
    underlay-xy(
      rectangle(50, 10,"solid","white"),
      15, 2,
      underlay-xy(
          star(5,"solid","darkgreen"),
          12, 0,
          star(5,"solid","darkgreen"))),
    rectangle(50, 10,"solid","black")))

# After
top-stripe = rectangle(50, 10, "solid", "red")
bot-stripe = rectangle(50, 10, "solid", "black")
dark-star = star(5, "solid", "darkgreen")

mid-section =
  underlay-xy(
    rectangle(50, 10, "solid", "white"),
    15, 2,
    underlay-xy(dark-star, 12, 0, dark-star))

above(
  top-stripe,
  above(
    mid-section,
    bot-stripe))

Řádky začínající # jsou Pyretem ignorovány: slouží ke komentování kódu a pomáhají hlavně vám a ostatním programátorům se v kódu vyznat. Říká se jim komentáře.

Odevzdání

Odpovědi na otázky (označené číslem otázky) a předělaný kód jedné z vlajek prosím uložte do souboru u2_prijmeni.arr a pošlete mi jej do pondělní půlnoci na mail nebo přes Facebook.

Nad čím se při úkolu zamyslet

  • proměnné jsou neměnné
  • proměnné mohou ušetřit čas s častým opakováním nějakého kousku kódu, ale také — pokud jsou dobře pojmenované — mohou výrazně zlepšit čitelnost celého programu
  • skládáním jednoduchých funkcí lze dosáhnout velkých výsledků (např. pouze pomocí circle, rectangle, star, rotate, overlay-align, above a beside lze nakreslit většinu světových vlajek)