Keep, Map en Combine
Hou het kort en eenvoudig

Introductie

Hallo, welkom bij les 2, vandaag gaan we je technieken leren om scripts kort te houden. Omdat het vereenvoudigen en verkorten van scripts veel inzicht en denkwerk verlangt zal deze video niet kort zijn. Neem de tijd voor deze les, verlang niet van jezelf dat je alles in één keer begrijpt, laat staan kunt toepassen in andere en nieuwe situaties. Door minder stof goed en grondig uit te diepen, kom je verder en kweek je uiteindelijk meer begrip.
Laten we beginnen met een paar op het eerste gezicht eenvoudige scripts.Sleep vanuit de categorie "operators" deze drie
,
,
blokken in je script veld. Maak, benoem en bespreek het verschil in resultaat van onderstaande blokken.
  • ​
    ​
  • ​
    ​
  • ​
    ​
Soms ligt groot inzicht en kunde bij diegene die zaken kunnen weglaten. "Doing less is doing more". Bekijk het volgende script.
  • ​
    ​
Spreek de volgende zin luid en duidelijk uit: DRIE PLUS "HUH". Herhaal deze zin nogmaals: DRIE PLUS "HUH". Onthoud: binnen elke functie, op de plaats van het lege input veld zeggen we voortaan..."HUH"
Klik op de kleine driehoek helemaal aan het einde van dit blok.
Wat denk je dat er gaat gebeuren wanneer ik in het lege "with input" veld het getal
invoer? Probeer, "call" deze functie. Bespreek het proces de werking van deze functie.
Wanneer we script blokken in een ring plaatsen wordt het script een functie. De invoervelden van een functie noemen we parameters. Parameters kunnen wel of geen naam hebben. Vandaar het luid en duidelijk uitspreken van het woord "HUH" bij een leeg parameter veld
Voorspel de output van onderstaand "HUH PLUS HUH" met input 5 blok. Het blok waarbij we nu alle twee de parameter velden leeg laten.
  • ​
    ​
Waarom vertellen we je dit allemaal? Omdat dit, de anonieme lambda functie het meest machtige en krachtige is van waarschijnlijk de gehele computerwetenschappen.
In computerwetenschappen noemen we wat in de ring gaat een expressie. De ring zet de expressie om in een functie. Een functie zonder naam heet een "Lambda functie", vernoemd naar de Griekse letter lambda. Het haar van Alonze, Snap's mascotte draagt het lambda teken in zich.
Alonzo

Acroniem generator

Om je dit machtige en krachtige te laten ervaren, maken we een acroniem generator.
Ga naar de categorie "operators" en sleep
naar het script veld. Voer de volgende handelingen uit:
  • Wijzig de tekst in "The Software For Novice and Advanced Programmers".
  • Split deze tekst per woord.
  • Maak een variabele, geef deze de naam "my words"
  • Wijs de lijst toe aan de variabele "my words"
Nu wil ik van elk woord in de lijst "my words" de lengte achterhalen. Hoe gaan we dat doen?
Meer traditioneel door gebruik te maken van loops en stapelling van commando blokken doen we dat als volgt. Neem het script over, bespreek de blokken die gelabeld zijn, test de werking van dit script.
Procedureel programmeren
In Snap kunnen we dit script in de traditioneel procedurele programmeerstijl nog iets eleganter, korter en daardoor meer efficient maken. Maak naast het bovenstaande script dit script en plaats de scripts naast elkaar in het script veld.
Loops, variabele, toewijzen, iteratie, initiΓ«ren, toekennen...kan dit script korter gemaakt worden? "HOF"s to the resque" Dat kan zeker met toegepaste HOF magie.
Zeg luid en duidelijk: map- length of text- HUH- over- my words. Maak deze HOF, je vind het "map" blok in de categorie variables. Wanneer je klaar bent...Klik met de muis op dit blok.
HOF
Het "map" blok past een functie toe, over elk item van de lijst
"Map" is prachtig en krachtig. De lijst genereert nu alleen nog maar de lengte van elk woord. Wanneer je als tabel, ook wilt zien welk woord het betreft verander je de "map" funtie naar het voorbeeld dat je hieronder ziet staan. Een tabel is een "list of lists".
map met de functie: HUH length of text HUH
Wanneer je wilt weten of de lengte van elk woord (item) in de lijst groter dan drie is? Dat doe je op deze manier.
De power of Snap! vind je terug in de power of map.
Ga naar de categorie variables, daar vind je nog een ander blok met daarin een ring geplaatst.Het "keep" blok met het zeshoekige (predikaat) input veld rapporteert waar of niet waar.
Het "keep" blok past een functie toe maar behoud alleen die items in de lijst die aan deze functie voldoen.
In plaats van de lengte van elke woord in de "my words" lijst als output terug te geven, zoals we met "map" gedaan hebben. Kunnen we met "keep" de lijst "my words filteren door alleen die items te behouden die aan deze functie voldoen. Maak en test onderstaand "keep" blok.
De HOF: "keep"
Het derde HOF blok is het "combine" blok, dit blok vind je ook in de categorie "variables".
Het "combine" blok past een functie toe en voegt alle items samen die aan deze functie voldoen.
Bekijk het voorbeeld dat je hieronder ziet staan.
De HOF: "combine"
Wat is er mis met dit "combine" blok? Herinner je de split functie aan het begin?
De funtie split de zin per woord, met als direct gevolg dat split alle spaties in de zin verwijderd. Deze spatie kunnen we in het "combine" blok eenvoudig opnieuw toevoegen.
  • Maak en test deze "combine" functie in verschillende stijlen, bijvoorbeeld in de telegramstijl.
Map, Keep en Combine zijn het hart van de datawetenschappen.
We gaan terug naar het schrijven van de acroniem funtie.
  1. 1.
    Verwijder alle blokken uit het script veld behalve de split "my words" lijst en het reporter blok "my words".
2. Behoud van de lijst "my words" die woorden waavan het aantal letters, de lengte van het woord groter dan het getal drie is.
3. Bewaar alleen de eerste letter van elk woord
​
4. Voeg de leters weer samen
De acroniem functie
5. Maak een eigen blok definitie voor de acroniem functie.
Acroniem, blok definitie.
Test het nieuwe blok:
  • ​
    ​
  • ​
    ​
  • ​
    ​
  • Bedenk een acroniem voor je eigen naam met karakter eigenschappen

Probeer meer

  1. 1.
    Herinner je nog de Caesarcijfer uit de vorige les? Maak een Caesarcijfer, die resulteerd in de terugave, output van alleen medeklinkers. Gebruik hiervoor de HOF's, "map", "keep" en "combine"
2. Taalanalyse: de Nederlandse taal staat erom bekend lange woorden te gebruiken. In dit project analyseren we een stuk tekst in de Nederlandse en Engelse vertaling voor zaterdag 20 juni 1942 uit Het dagboek van Anne Frank. Open deze lin​k, klik vervolgens linksonder op "EDIT" en ga de uitdaging aan...welke taal is meer efficient? Is dat de Nederlandse of is dat toch de Engelse taal?

Testopgaven

  1. 1.
    Welke van onderstaande scripts genereert een tabel met in de eerste kolom de getallen met in de tweede kolom het kwadraat van de getallen?
  • ​
    ​
  • ​
    ​
  • ​
    ​
  • ​
    ​
2. Welk blok laat je een functie in een ring uitvoeren? Er zijn twee goede antwoorden.
  • ​
    ​
  • ​
    ​
  • ​
    ​
  • ​
    ​
​
​
​
​
​
​
​
Last modified 1yr ago