Geheimtaal
"Sound from Scratch"

Introductie

Afgelopen week heb je geleerd hoe je funties kunt maken, hoe je in Snap! met funties je scripts kunt vereenvoudigen en overzichtelijker kunt maken.
In deze les gaan wij een geheimtaal programmeren en verdiepen we ons verder in de praktische toepassing en eigenschappen van het funtioneel programmeren.

Geheimtaal

Ga naar de categorie "operators" en sleep het
blok naar je script veld. Verander de input van dit blok in "I love Snap!", split deze zin per letter. Wanneer je met de muis op dit blok klikt krijg je de lijst met afzonderlijke letters te zien. Wanneer je op deze lijst, zichtbaar als tekstballon met de muis dubbelklikt, krijg je de lijst in "table view" te zien. Plaats deze tabel op het Snap podium gedeelte.
"list view" en "table view"
We willen deze lijst per item, per letter filteren. Het filter dat we gebruiken is het klinker- medeklinker filter. Maak een nieuwe "List" aan en voeg daaraan alle klinkers, als element toe.
We gaan het If/else blok laten bepalen welke letter in onze zin "I Love Snap!" een klinker, en welke letter een medeklinker is.
Wanneer de letter een klinker is, raporteert het script: de klinker, de letter b en wederom de desbetreffende klinker.
Wanneer je de Shift toets ingedrukt houdt kun je in één keer, drie lege input velden aan de lijst toevoegen!
Bouw dit script, beide blokken vind je in de categorie variabele.
  • Test dit predikaat blok, en bespreek met elkaar de werking en mogelijkheden van dit blok
Bouw dit if/else reporter script
En...dit script. Dit script heeft een ring. Weet je nog uit de vorige les? Daar hebben, door gebruik te maken van een functie het metro netwerk geprogrammeerd.
"map" functie over een lijst
  • Klik op dit blok
  • Dubbelklik op dit blok, en plaats de tabel op het podium.
De klinker functie.
  • Het input veld achter "contains" hebben we niet zonder reden leeg gelaten.
  • Bespreek met elkaar grondig de werking van deze functie
Dergelijke funties, die een leeg input veld hebben zijn functies van hogere orde, "Higher Order Functions" in Snap! en worden kortweg HOF's genoemd. In de volgende les gaan we daar uitgereider op in. Nu gaan we terug naar het script om verder te werken aan onze Geheimtaal.
Wijzig het vorige script naar onderstaande voobeeld, nu met drie lege HOF's input velden.
  • Kun je voorspellen wat de output van deze HOF zal zijn?
Geheimtaal: "Higher Order Function" HOF
  • Klik op deze functie om daar achter te komen.
In vorige lessen heb je het
blok al leren gebruiken. Laat door het nemen van onderstaande stappen de Geheimtaal door de sprite uitspreken.
  • ​
    ​
  • ​
    ​

Script blok maken

Snap! biedt je de mogelijkheid om zelf unieke script blokken aan te maken. We gaan de Geheimtaal functie zijn eigen blok geven. Verander en test eerst de gemaakte HOF functie naar onderstaand Fins voorbeeld.
De "i" geheimtaal uit Finland
In Finland gebruiken kinderen de "i" taal als geheimtaal. Elke klinker in geschreven tekst en gesproken woord worden gewijzigd in de letter "i".
  • Klik in het commandoblokken veld aan de rechterzijde bovenaan op het
    teken.
  • Klik op de optie reporter en klik op "operators". In het tekst input veld voer je de volgende tekst in: vertaal tekst naar geheimtaal
Maak zelf een blok
  • Klik op het woord +tekst+ en selecteer vervolgens de optie "input name".
  • Klik aan de rechterzijde op het kleine driehoekje. Omdat onze tekst een lijst is selecteer je de
    "list" optie. Klik op "OK" en klik vervolgens op "Apply". Laat het venster "Block editor" geopend!
Helemaal onderin de commando groep "operators" vind je het nieuwe blok.
Sleep met je muis dit blok in het script veld. Wanneer je met de muis op dit blok klikt doet, rapporteert dit nieuwe script blok niets. We moeten de geheimtaal functie er nog aan toevoegen.
  • Voeg de functie in het nieuwe blok. Verwijder het
    blok, wijzig het "list" input veld door de variabele + tekst+
    te slepen naar het "list" input veld van de functie klik vervolgens op "OK". Het venster van de "Block Editor" sluit zich.
  • Plaats in het script veld het lijst "I love Snap!" blok in het zelfgemaakte blok. Klik met je muis op het blok. Je hebt nu je eigen blok gemaakt.
    ​
  • Test het script blok.
  • Wil je dit blok wijzigen, omdat je een andere versleuteling op de tekst wilt gaan toepassen? Klik met de rechtermuisknop op dit blok en selecteer de optie "edit".
  • Plaats het blok in het "say" blok, de sprite op het podium spreekt de geheimtaal uit.
Het maken en bouwen van scripts vanuit HOF's en functies heet functioneel programmeren. Door de afwezigheid, het abstraheren van loops, reporters, itteraties en toekennen daarvan wordt het script beter leesbaar en gaat de aandacht meer naar de processen binnen het script.

Probeer meer

  1. 1.
    Het "map" blok genereert een nieuwe lijst, door aan elk element uit een lijst een functie toe te voegen. Bekijk de "Map" funties die je hieronder ziet staan.
  • Voorspel de uitkomst van elke functie.
  • Controleer in Snap! of je voorspellingen juist waren, door de functies te na te bouwen.
De HOF functie "Map"
2. Bedenk en maak een geheimtaal. Deze blokken
,
kunnen je hierbij helpen. Hier enkele ideeΓ«n.
  • Ubbi dubbi geheimtaal: voor elke klinker plaats je "-ub" (Snap! --> Snubap!)
  • RΓΈversprog geheimtaal: voegt aan elke medeklinker de letter "o" en de medeklinker zelf toe. (Snap --> Sosnonapop!
  • Pig Latin: elke eerste letter + "-ay" wordt verplaatst naar het einde van het woord. (Snap! --> napsay)
Gebruik "map" om een "Fizz-Buzz" spel te maken. Je maakt een blok dat de gatallen van 1 t/m 100 rapporteerd. Is het getal een veelvoud van drie rapporteert de functie "Fizz". Is het getal een veelvoud van vijf dan rapporteert de functie "Buzz". Is het getal een veelvoud van drie en vijf dan rapporteert de functie "FizzBuzz". Dit modulo
blok kan je daarbij helpen.
3. Maak de Caesarcijfer functie. Binnen de cryptografie is de Caesarcijfer een encryptie techniek waarbij elke letter wordt vervangen door de letter een aantal stappen (sleutel) binnen het aphabet op te schuiven.
Caesarcijfer
​
Deze blokken kun je daarbij helpen:
en
​
4. Verbeter de functie van het Caesarcijfer: Bij gebruik van het getal 3 als versleuteling zal de letter "Z" in de huidige functie "]" rapporteren. Verbeter de functie zodanig dat de letter "Z" de letter "C" rapporteerd.

Testopgaven

  • Welke van onderstaande functies kun je in "map" plaatsen zodanig dat elke klinker wordt vervangen door de letter "a"?
  • ​
    ​
  • ​
    ​
  • ​
    ​
  • ​
    ​
2. Waar is de reporter versie van het "if" blok een abstractie van?
  • ​
    ​
  • ​
    ​
  • ​
    ​
  • ​
    ​
​
​
​
Last modified 1yr ago