From fb6e2956326872ed11c5ec394b340bfcb88f8d07 Mon Sep 17 00:00:00 2001 From: Daniel Berg Date: Mon, 16 Oct 2023 14:33:34 +0200 Subject: [PATCH] initial commit --- .github/workflows/gh-pages.yml | 33 ++ .gitignore | 3 + Gemfile | 6 + Gemfile.lock | 21 + LICENSE | 21 + README.md | 44 ++ .../chapter_template_folder/chapter.adoc | 8 + .../chapter_template_folder/images/logo.png | Bin 0 -> 10891 bytes docs/chapters/combining_tools/chapter.adoc | 9 + docs/chapters/combining_tools/images/logo.png | Bin 0 -> 10891 bytes docs/chapters/flow_and_state/chapter.adoc | 32 + docs/chapters/flow_and_state/images/logo.png | Bin 0 -> 10891 bytes docs/chapters/goals_and_tools/chapter.adoc | 6 + docs/chapters/goals_and_tools/images/logo.png | Bin 0 -> 10891 bytes .../tool_centered_assignments/chapter.adoc | 8 + .../tool_centered_assignments/images/logo.png | Bin 0 -> 10891 bytes docs/chapters/tools/chapter.adoc | 555 ++++++++++++++++++ docs/chapters/tools/images/if-1.png | Bin 0 -> 36046 bytes docs/chapters/tools/images/switch_loop.png | Bin 0 -> 17257 bytes docs/index.adoc | 18 + 20 files changed, 764 insertions(+) create mode 100644 .github/workflows/gh-pages.yml create mode 100644 .gitignore create mode 100644 Gemfile create mode 100644 Gemfile.lock create mode 100644 LICENSE create mode 100644 README.md create mode 100644 docs/chapters/chapter_template_folder/chapter.adoc create mode 100644 docs/chapters/chapter_template_folder/images/logo.png create mode 100644 docs/chapters/combining_tools/chapter.adoc create mode 100644 docs/chapters/combining_tools/images/logo.png create mode 100644 docs/chapters/flow_and_state/chapter.adoc create mode 100644 docs/chapters/flow_and_state/images/logo.png create mode 100644 docs/chapters/goals_and_tools/chapter.adoc create mode 100644 docs/chapters/goals_and_tools/images/logo.png create mode 100644 docs/chapters/tool_centered_assignments/chapter.adoc create mode 100644 docs/chapters/tool_centered_assignments/images/logo.png create mode 100644 docs/chapters/tools/chapter.adoc create mode 100644 docs/chapters/tools/images/if-1.png create mode 100644 docs/chapters/tools/images/switch_loop.png create mode 100644 docs/index.adoc diff --git a/.github/workflows/gh-pages.yml b/.github/workflows/gh-pages.yml new file mode 100644 index 0000000..3f1df01 --- /dev/null +++ b/.github/workflows/gh-pages.yml @@ -0,0 +1,33 @@ +name: Publish to GitHub Pages + +# Controls when the action will run. Triggers the workflow on push or pull request +# events but only for the master branch +on: + push: + branches: [ master, main ] + pull_request: + branches: [ master, main ] + +# A workflow run is made up of one or more jobs that can run sequentially or in parallel +jobs: + # This workflow contains a single job called "build" + build: + # The type of runner that the job will run on + runs-on: ubuntu-latest + + # Steps represent a sequence of tasks that will be executed as part of the job + steps: + # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it + - uses: actions/checkout@v3 + + # Includes the AsciiDoctor GitHub Pages Action to convert adoc files to html and publish to gh-pages branch + - name: asciidoctor-ghpages + uses: ntijoh-te4/asciidoctor-ghpages-action@1af5baccd44ff01c9cb42030b0ee6d5aab4d5d8b + with: + #pdf_build: true + asciidoctor_params: -r asciidoctor-kroki + # adoc_file_ext: .ascii # default is .adoc + source_dir: docs/ # default is . + # slides_build: true + #pre_build: bundle install + # post_build: diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..355ba8b --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +.ruby-version +**/.DS_STORE +docs/index.html \ No newline at end of file diff --git a/Gemfile b/Gemfile new file mode 100644 index 0000000..b3ccba2 --- /dev/null +++ b/Gemfile @@ -0,0 +1,6 @@ +source 'https://rubygems.org' + +gem 'asciidoctor' +gem 'coderay' +gem 'asciidoctor-kroki' +gem 'asciidoctor-tabs' diff --git a/Gemfile.lock b/Gemfile.lock new file mode 100644 index 0000000..c9b115b --- /dev/null +++ b/Gemfile.lock @@ -0,0 +1,21 @@ +GEM + remote: https://rubygems.org/ + specs: + asciidoctor (2.0.20) + asciidoctor-kroki (0.8.0) + asciidoctor (~> 2.0) + asciidoctor-tabs (1.0.0.beta.6) + asciidoctor (>= 2.0.0, < 3.0.0) + coderay (1.1.3) + +PLATFORMS + arm64-darwin-22 + +DEPENDENCIES + asciidoctor + asciidoctor-kroki + asciidoctor-tabs + coderay + +BUNDLED WITH + 2.4.19 diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..3216bab --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2023 ntijoh-te4 + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..8530e0d --- /dev/null +++ b/README.md @@ -0,0 +1,44 @@ +# Verktygsboken + +## 1. Installation + +### 1.1 Ruby + +#### 1.1.1 Windows + +Om du har [Chocolatey](https://chocolatey.org/): `choco install ruby` + +Annars : [RubyInstaller for Windows](https://rubyinstaller.org/) + +#### 1.1.2 MacOs + +1. Installera [Homebrew](https://brew.sh/) +2. `brew install ruby` + +### 1.2 Asciidoctor + +I verktygsbokens rotmapp: `bundle install` + +## 2. Bygga boken lokalt + +I verktygsbokens rotmapp: `asciidoctor -r asciidoctor-kroki -r asciidoctor-tabs docs/index.adoc` + +Den färdigbyggda boken finns i `docs/index.html` + +Öppna gärna `docs/index.html` med VS Code Live Server + +### 2.1 Bygga boken lokalt automagiskt vid filändring + +#### 2.1.1 Windows + +Vet ej + +#### 2.1.1 MacOs + +`brew install fswatch` +`fswatch -o ./docs -e "index.html" | xargs -n1 -I{} asciidoctor -r asciidoctor-kroki -r asciidoctor-tabs docs/index.adoc` + + +## 3. Bygga boken till GH Pages. + +Boken byggs automagiskt vid push till main-branchen på GitHub (kan ta några minuter). \ No newline at end of file diff --git a/docs/chapters/chapter_template_folder/chapter.adoc b/docs/chapters/chapter_template_folder/chapter.adoc new file mode 100644 index 0000000..fb5a0c0 --- /dev/null +++ b/docs/chapters/chapter_template_folder/chapter.adoc @@ -0,0 +1,8 @@ +:imagesdir: chapters/chapter_template_folder/images + + += Chapter Title Goes Here + +Wut? + +image::logo.png[Sinatra Logo] diff --git a/docs/chapters/chapter_template_folder/images/logo.png b/docs/chapters/chapter_template_folder/images/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..061d2ecbabe5677bc3bc0632556bdfa1551614cc GIT binary patch literal 10891 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 literal 0 HcmV?d00001 diff --git a/docs/chapters/combining_tools/chapter.adoc b/docs/chapters/combining_tools/chapter.adoc new file mode 100644 index 0000000..5c3bacc --- /dev/null +++ b/docs/chapters/combining_tools/chapter.adoc @@ -0,0 +1,9 @@ +:imagesdir: chapters/test/images + += Kombinering av verktyg + +== Sammanfogning + +== Nästning + +== Ihopvävning diff --git a/docs/chapters/combining_tools/images/logo.png b/docs/chapters/combining_tools/images/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..061d2ecbabe5677bc3bc0632556bdfa1551614cc GIT binary patch literal 10891 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 literal 0 HcmV?d00001 diff --git a/docs/chapters/flow_and_state/chapter.adoc b/docs/chapters/flow_and_state/chapter.adoc new file mode 100644 index 0000000..a549217 --- /dev/null +++ b/docs/chapters/flow_and_state/chapter.adoc @@ -0,0 +1,32 @@ +:imagesdir: chapters/flow_and_state/images + + += Flöde och State + +Att programmera är att ge instruktioner till en dator, eller snarare datorns processor. + +En processor kan bara göra en sak åt gången, och instruktionerna utförs därför en efter en, i ett _flöde_. + +Under _flödets_ gång kommer variabler att skapas och dess värden uppdateras. + +_State_ är värdet på alla variabler i ett program, _vid ett givet tillfälle_. + +Programmets _state_ ändras alltså allteftersom programmet körs. + +Att programmera handlar därför om att skapa ett _flöde_ som bearbetar _state_ och ser till att programmet har rätt _state_ när det är klart. + +Man kan alltså se _flödet_ som en _serie av transformationer_ av _state_. + +För att konstruera programmets _flöde_ och för att transformera _state_ finns ett _begränsat_ antal verktyg som används av alla programmerare oavsett vilka program de skriver eller språk de använder. + +Genom att kombinera dessa verktyg på olika sätt, kan man skapa _alla_ program. + +Verktygen är oberoende av kod, men kan så klart implementeras i kod i valfritt programmeringsspråk. + +Den här boken går igenom de verktyg man behöver för att klara Programmering 1 (och antagligen bra mycket mer än så). + +== Flödesschema + +För att illutstrera verktygen används flödesscheman. + +Flödesscheman fungerar såhär ... \ No newline at end of file diff --git a/docs/chapters/flow_and_state/images/logo.png b/docs/chapters/flow_and_state/images/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..061d2ecbabe5677bc3bc0632556bdfa1551614cc GIT binary patch literal 10891 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 literal 0 HcmV?d00001 diff --git a/docs/chapters/goals_and_tools/chapter.adoc b/docs/chapters/goals_and_tools/chapter.adoc new file mode 100644 index 0000000..a6d6f71 --- /dev/null +++ b/docs/chapters/goals_and_tools/chapter.adoc @@ -0,0 +1,6 @@ +:imagesdir: chapters/test/images + + += Mål och Verktyg + +icon:exclamation-circle[] Här behövs text om programmerare sätter upp mål- och delmål och hur de använder verktyg för att uppnå dessa mål- och delmål. Gärna med praktiska exempel. \ No newline at end of file diff --git a/docs/chapters/goals_and_tools/images/logo.png b/docs/chapters/goals_and_tools/images/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..061d2ecbabe5677bc3bc0632556bdfa1551614cc GIT binary patch literal 10891 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 literal 0 HcmV?d00001 diff --git a/docs/chapters/tool_centered_assignments/chapter.adoc b/docs/chapters/tool_centered_assignments/chapter.adoc new file mode 100644 index 0000000..5154043 --- /dev/null +++ b/docs/chapters/tool_centered_assignments/chapter.adoc @@ -0,0 +1,8 @@ +:imagesdir: chapters/test/images + + += Verktygsbaserade Uppgifter + +Wut + +image::logo.png[Sinatra Logo] diff --git a/docs/chapters/tool_centered_assignments/images/logo.png b/docs/chapters/tool_centered_assignments/images/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..061d2ecbabe5677bc3bc0632556bdfa1551614cc GIT binary patch literal 10891 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 literal 0 HcmV?d00001 diff --git a/docs/chapters/tools/chapter.adoc b/docs/chapters/tools/chapter.adoc new file mode 100644 index 0000000..4d5e546 --- /dev/null +++ b/docs/chapters/tools/chapter.adoc @@ -0,0 +1,555 @@ +:imagesdir: chapters/tools/images +:tabs-sync-option: + += Verktyg + +== Ändring av state (transformation) + +=== Tilldelning + +icon:question-circle[] Är tilldelning ett verktyg eller räknas det som programming "knowledge"? + +För att kunna använda _värden_ (t.ex tal) i program måste man först lagra dem i en variabel. +Att lagra ett värde i en variabel gör man med hjälp av tilldelning. + +En tilldelning består av tre komponenter: en _variabel_, ett _tilldelningstecken_ och ett _värde_. + +[tabs,sync-group-id=lang] +==== +Ruby:: ++ +.Tilldelningsverktyget i Ruby +[source,ruby] +---- +speed = 10 +---- +Python:: ++ +[source,python] +---- +speed = 10 +---- +Javascript:: ++ +[source,javascript] +---- +const speed = 10; +---- +C#:: ++ +[source,javascript] +---- +var speed = 10; +---- +==== + +=== Initialisering + +Initialisering används när man vet att man kommer behöva ett värde som man kan _modifiera_ längre fram i flödet. + +.Exempel: Summera tal +[NOTE] +==== +När man vill räkna ut summan alla värden i en lista behöver man ha en variabel som innehåller summan. För varje värde i listan vill man sen addera värdet till summa-variabeln. Men för att man ska kunna addera det första värdet i listan till summa-variabeln måste summa-variabeln först vara _initialiserad_ med ett värde, antagligen 0. +==== + +.Exempel: Bilspel +[NOTE] +==== +I ett bilspel vill man kunna gasa och bromsa. Både gas- och bromskoden kommer _modifiera_ hastigheten på bilen, men för att hastigheten ska kunna modifieras måste det först skapas en variabel som innehåller hastigheten, och variabeln måste ha _initialiserats_ med ett värde som kan modifieras. +==== + +image::initialisering.png[Initialiseringsverktyget] + +[tabs,sync-group-id=lang] +==== +Ruby:: ++ +[source,ruby] +---- +speed = 0 <1> + +... + +if pressed_button == 'w' + speed += 1 <2> +elsif pressed_button == 's' + speed -= 1 <2> +elsif pressed_button == 'esc' + speed = 0 <2> +end +---- +<1> Initialisering av speed-variabeln +<2> Modifiering av speed-variabeln +Python:: ++ +[source,python] +---- +speed = 0 +---- +Javascript:: ++ +[source,javascript] +---- +const speed = 0; +---- +C#:: ++ +[source,c#] +---- +var speed = 10; +---- +==== + +=== Inkrementering + +Inkrementering innebär att _öka_ värdet på en variabel. Oftast är värdet ett heltal. Inkrementering används ofta inne i <<_upprepning_av_flöde,loop-verktygen>> för att hålla koll på räknar-variabeln, men det går även att använda tillsammans med de olika <<_uppdelning_av_flöde,if-verktygen>>. + +För att _inkrementera_ värdet på en variabel måste variabeln först vara <<_initialisering,_initialiserad_>> + +.Inkrementering med if och if-elsif +[tabs,sync-group-id=lang] +==== +Ruby:: ++ +[source,ruby] +---- +healthiness_score = 0 <1> + +... + +if favourite_drink == 'water' + healthiness_score += 1 <2> +end + +if favourite_food == 'fruit' + healthiness_score += 1 <2> +elsif favourite_food == 'carrot' + healthiness_score += 2 <2> +elsif favourite_food == 'pizza' + healthiness_score -= 2 <3> +end +---- +<1> Initialisering av healthiness-variabeln +<2> Inkrementering av healthiness-variabeln +<3> Dekrementering av healthiness-variabeln +Python:: ++ +[source,python] +---- +speed = 0 +---- +Javascript:: ++ +[source,javascript] +---- +const speed = 0; +---- +C#:: ++ +[source,c#] +---- +var speed = 10; +---- +==== + +.Inkrementering i räknande loop +[tabs,sync-group-id=lang] +==== +Ruby:: ++ +[source,ruby] +---- + +number_of_greeted_people = 0 <1> + +... + +while number_of_greeted_people < number_of_people + puts "Hello, nice to meet you!" + number_of_greeted_people += 1 <2> +end +---- +<1> Initialisering av number_of_greeted_people-variabeln +<2> Inkrementering av number_of_greeted_people-variabeln +Python:: ++ +[source,python] +---- +speed = 0 +---- +Javascript:: ++ +[source,javascript] +---- +const speed = 0; +---- +C#:: ++ +[source,c#] +---- +var speed = 10; +---- +==== + + +=== Dekrementering + +Dekrementering innebär att _minska_ värdet på en variabel. Oftast är värdet ett heltal. Dekrementering används ofta inne i loopar för att hålla koll på räknar-variabeln, men det går även att använda tillsammans med if-verktygen. + +För att _dekrementera_ värdet på en variabel måste variabeln först vara <<_initialisering,_initialiserad_>> + +.Dekrementering med if och if-elsif +[tabs,sync-group-id=lang] +==== +Ruby:: ++ +[source,ruby] +---- +healthiness_score = 0 <1> + +... + +if favourite_drink == 'water' + healthiness_score += 1 <2> +end + +if favourite_food == 'fruit' + healthiness_score += 1 <2> +elsif favourite_food == 'carrot' + healthiness_score += 2 <2> +elsif favourite_food == 'pizza' + healthiness_score -= 2 <3> +end +---- +<1> Initialisering av healthiness-variabeln +<2> Inkrementering av healthiness-variabeln +<3> Dekrementering av healthiness-variabeln +Python:: ++ +[source,python] +---- +speed = 0 +---- +Javascript:: ++ +[source,javascript] +---- +const speed = 0; +---- +C#:: ++ +[source,c#] +---- +var speed = 10; +---- +==== + +.Dekrementering i räknande loop +[tabs,sync-group-id=lang] +==== +Ruby:: ++ +[source,ruby] +---- + +number_of_laps_left = 5 <1> + +... + +while number_of_laps_left > 0 + puts "Running a lap!" + number_of_laps_left -= 1 <2> +end +---- +<1> Initialisering av number_of_laps_left-variabeln +<2> Dekrementering av number_of_laps_left-variabeln +Python:: ++ +[source,python] +---- +speed = 0 +---- +Javascript:: ++ +[source,javascript] +---- +const speed = 0; +---- +C#:: ++ +[source,c#] +---- +var speed = 10; +---- +==== + +=== Mellanlagring + +Mellanlagring används när man vill _återanvända_ värdet från en uträkning eller ett funktionsanrop senare i flödet. Exempelvis för att funktionsanropet kräver mycket resurser, tar lång tid att genomföra, eller kräver input från en användare, eller för att det bara blir tydligare kod. + +.Exempel: Lagra användares initialer +[NOTE] +==== +Istället för att varje gång man vill använda en användares initialer extrahera dessa från variabeln som innehåller användarens namn, kan man extrahera dem _en_ gång och mellanlagra resultatet i en variabel. +==== + +.Exempel: Hur många gånger förekommer ordet i boken? +[NOTE] +==== +Ett program ska jämföra vilket av två ord som förekommer flest antal gånger i en bok. Det tar relativt lång tid att söka igenom boken och räkna antalet förekomster av ordet. Därför kan man räkna anatalet förekomster en gång, och lagra resultatet i en variabel, som man sedan använder varje gång man vill använda värdet. +==== + +[tabs,sync-group-id=lang] +==== +Ruby:: ++ +[source,ruby] + +---- +initials = "#{first_name[0].capitalize}.#{last_name[0].capitalize}." <1> + +... + +puts "Your initials are: #{initials}" <2> +---- +<1> Mellan__lagring__ av värdet. +<2> _Användning_ av värdet. + +Python:: Python +Javascript:: Javascript +C#:: C# +==== + +=== Konkatenering + +icon:question-circle[] Är det här ett verktyg? + +=== Konfigurationslagring + +Konfigurationslagring används när man vill _använda_ ett värde längre fram i flödet, men man vill inte skriva ut värdet direkt, utan vill kunna använda en variabel med ett _beskrivande namn_ istället för att skriva värdet direkt. + +.Exempel: Priser med och utan moms +[NOTE] +==== +Ett program som ska visa priser med och utan moms. Istället för att skriva pris * 1.25 kan man skriva pris * moms, förutsatt att man i moms-variabeln lagrat värdet 1.25. +==== + +.Exempel: Kastbanor med gravitationskonstant +[NOTE] +==== +I ett program som ska räkna ut kastbanor kan man lagra gravitationskonstanten (9.807) i variabeln `gravitation` och använda den istället för värdet varje gång man behöver använda gravitationskonstanten. +==== + +.Exempel: Spara återkommande textfraser +[NOTE] +==== +I Bröderna Lejonhjärta-spelet ska alla vakter avsluta sina meningar med frasen _"All makt åt Tengil vår befriare!"_. Istället för att skriva frasen på alla ställen kan man lagra frasen i en variabel och använda variabeln vid varje tillfälle. +==== + +Konfigurationslagring gör koden tydligare att förstå för oss människor (datorn bryr sig inte), och gör det enklare att ändra - om man behöver ändra det man lagrat behöver man bara ändra på ett enda ställe. + +image::logo.png[Sinatra Logo] + +[tabs,sync-group-id=lang] +==== +Ruby:: ++ +[source,ruby] +---- +vat = 1.25 <1> + +... + +puts "#{price} exkl moms (#{price * vat} inkl. moms)" <2> +---- +<1> Konfigurations__lagring__ av momssatsen (vat står för Value Added Tax, (moms på engelska)), +<2> _Användning_ av momssatsen. +Python:: ++ +[source,python] +---- +gravitation = 9.807 +---- +Javascript:: ++ +[source,javascript] +---- +const gravitation = 9.807; +---- +C#:: ++ +[source,c#] +---- +var gravitation = 9.807; +---- ++ +[NOTE] +**Type inference** räknar ut vilken datatyp som lagras i variabeln. Även om det inte står att variabeln innehåller en specifik datatyp kommer variabeln fortfarande vara "låst" till den datatyp som initialt lagrades i variabeln (i det här fallet en `int`). +==== + +== Uppdelning av flöde (selektion) + +=== If + +Om du vill att ditt program ska göra en sak _enbart_ om ett villkor är sant, kan du använda if. + +If-verktyget använder ett _villkor_ (ett påstående som kan vara sant eller falskt), och om villkoret utvärderas till sant kommer något ske. +Om villkoret inte utvärderas till sant kommer programflödet fortsätta efter villkoret, som om ingenting hänt. + +.Exempel: Pris med eller utan moms. +[NOTE] +==== +På en hemsida som framförallt säljer till företag visas priserna utan moms. Men om någon klickat i att de vill se priserna med moms, ska priserna modifieras med momsen +==== + +image::if-1.png[If-verktyget] + + +[tabs,sync-group-id=lang] +==== +Ruby:: ++ +[source,ruby] +---- +if show_price_with_vat? + price = price * vat +end +---- +Python:: ++ +[source,python] +---- +if show_price_with_vat: + price = price * vat +end +---- +Javascript:: ++ +[source,javascript] +---- +null +---- +C#:: ++ +[source,c#] +---- +Null +---- ++ +==== + +.Exempel: Ett till exempel +[NOTE] +==== +Exempeltext +==== + +=== If-else + + +=== If-elsif + +=== If-elsif-else + + +=== Lorem + +[tabs,sync-group-id=lang] +==== +Ruby:: Ruby +Python:: Python +Javascript:: Javascript +C#:: C# +==== + +=== Ipsum + +[tabs,sync-group-id=lang] +==== +Ruby:: Ruby +Python:: Python +Javascript:: Javascript +C#:: C# +==== + + +== Upprepning av flöde (iteration) + + +=== Räknande Loop + +En räknande loop används när ... + +==== Inkrementerande Loop + +En inkrementerande loop används när ... + +[tabs,sync-group-id=lang] +==== +Ruby:: Ruby +Python:: Python +Javascript:: Javascript +C#:: C# +==== + +==== Dekrementerande Loop + +En inkrementerande loop används när ... + +[tabs,sync-group-id=lang] +==== +Ruby:: Ruby +Python:: Python +Javascript:: Javascript +C#:: C# +==== + +=== Loop Med Brytvärde + +icon:exclamation-circle[] Behöver utvecklas (alla loopar är väl egentligen loopar med brytvärde, men själva _intentionen_ är väl det som skiljer). + +== Avbrott av flöde + +icon:question-circle[] Är detta en grupp av verktyg? + +=== Tidigt avbrott + +icon:question-circle[] Är detta ett verktyg? (och ska den i så fall ligga här eller under upprepning av flöde?) + +== Sammansatta verktyg + +=== Iterativt uppbyggd output + +Iterativt uppbyggd output används när man har en _mängd_ data (ofta en lista) att behandla, och output är beroende av datan. + +I iterativt uppbyggd output <<_initialisering,_initialiserar_>> man först output-variabeln med ett lämpligt värde som vi sedan kan _modifiera_. + +Sedan <<_upprepning_av_flöde,_itererar_>> man över datan man behöver behandla och modifierar i iterationen output-variabeln (t.ex genom att addera värden till den) + +Slutligen, när iterationen är klar kommer output-variabeln innehålla rätt värde, och man kan returnera den. + +.Exempel: Skapa en lista av alla ord som börjar med en given bokstav i en text +[NOTE] +==== +Först <<_initialisering,_initialiserar_>> vi output-variabeln med lämpligt värde, i det här fallet antagligen en tom lista (som kan innehålla alla ord vi hittar). + +Sen _itererar_ vi (med <<_upprepning_av_flöde, lämpligt verktyg för uppreping av flödet>>) över orden och i varje varv i iterationen använder vi <<_if,__if__-verktyget>> för att _modifiera_ output-variabel-listan om om ordet börjar med den givna bokstaven. + +Slutligen, när iterationen är klar kommer output-variabel-listan innehålla alla ord som efterfrågades, och vi är klara +==== + +Lämpliga värden att _initialisera_ output-variabeln med är ofta: + +- 0 (om output ska vara ett tal) +- en tom sträng (om output ska vara en sträng) +- en tom lista (om output ska vara en lista) + +Men det finns undantag, t.ex kan man ibland _initialisera_ output-variabeln till ett av värdena som finns i mängden man ska behandla. + +=== Switch Loop + +icon:question-circle[] Är detta ett verktyg? + + +image::switch_loop.png[Switch Loop?] diff --git a/docs/chapters/tools/images/if-1.png b/docs/chapters/tools/images/if-1.png new file mode 100644 index 0000000000000000000000000000000000000000..7c5793332da0c467620c40fc79e6100e94dc23a2 GIT binary patch literal 36046 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%0DLbFKQsG!l-_E+b9=>-?U3E*+Ls`CJQ`l)u`J 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 JVk75>{{nB_diMYT literal 0 HcmV?d00001 diff --git a/docs/chapters/tools/images/switch_loop.png b/docs/chapters/tools/images/switch_loop.png new file mode 100644 index 0000000000000000000000000000000000000000..ab850cca4a33e8ad171bb68ba82b564a8ac16bc8 GIT binary patch literal 17257 zcmbTdbyOV9);9_Sch}$vuEE_s*x&?rcXtWy9^3|ZcXto&?jGFXn>^>d=RNn{_5E{a zt(vax-cozluXfe$>JC$olR$#UhX(@#Lz0pd1%QEpg9=zIEHvm}GhlZQ3=C1oTtq}c zN<@T2!NJzV+{zdXOfoD<4MtsQ1Uu_Te5{}uI3)1r2IMhhEV?iPNyjRzl%Im|cUT%1 zC&iwI2q>$g(olnU^y=F zmsr;J15;%G}4)B%cTc!SB06`;tO`O;4kNCFkB>?yn>H4X>2lf2;7l z|5(iH*_CMqBbi1my7{uk8;Sz%r{*BG0|6HLZNp01Uou!9O49(Bq#wbUQ^}v!m{Z&T zVZ?gJPy@9IEC<-T9m)c(U>(BS5t|Ojru;(Uf_V)o3^sR!`f{+pe?uY{xP-qFN|Joc zGUNMuEaMw4bUF$d&MMhnvwm-L~maDIQeS8EZ zMIS5FGw3)@5!F)oRj4~*RU{Hn3(SRs_nh;i)$hsZp+r)UAfjaYZ15>GFsLOCEzrv& znB*4{vli)*vJf~Ak%4w7&h=Lz`#|>efv1|l&fl$w%n@9}*@vO~KE|CFGLGoK0-vku z9?yilzc*0P^1~Ux_a6iW^h<`Skh;X~^#`G>L{g6$h#@bB7Sz-}PLM|LBZxp?KC9~o zb8@=;?qrq!#;R-OnCwT$6^epsG!Q~_9oS&Ub^W-lRqfIlo5}?2OZg&!I1x02f(RHV z^c=*Y=tny7LdAmYry1PARJ6Ix;j%n%O6(k5iqm&X;3ISq)u|#Y558S9V(C<&5MWku;R>$r)r4 z$E}fZY9i+X=RK#7;w{#nqS1|Mza+*q3Tz`2tlz1BBD#y}g0w;uolGT6alni=aRyFL zWg}nP{EzB=4iDbI{ieeF{r$-|TdFa@&K~?$yRLXlC;YOJjlm{4913=Xp+d$OARm(z z0(oRnaKTyhkPded*ZevDzzC5biu$|7LQwP`)opR(1XAlk|3Z)!#8Zb>4ZPFCSb}#6 z;M)Q#hLPx@w!_wfIN#!K{-h?);RgQP&GQFO2o+se%q*11AX1&gC6uLC&?}DQ3q+V0 zAeQwD1{xW_2>KfewTLRoX&k*ITP?AfOyOM zkpm)0Pq3QY4Q=VCkuZfmeC|&Lxg|Ny@0_0=036$daguYSnrM7mI^Ri6Fp4m6FgQ>j z(B;v2LSsVTzMxCR7)e}{ip6mPApmgZgytN_kjL;P>9;~s8YAi>8r164DpJMD<;s=y zGRMs`SOrDW*&`=L2(>s|;p61;waY)XUw_(BXu*)k+tI^IFX+ZjE(7 zX2GOlc7aarM)5|;MwQU4-Aw4r@T_`yjm&PqAd75#VS!03g}h_uf$GF;T8tU)MC4$e zz4?vVs+pSEq$YEqiX5`Q3ZPizqPEj+PUa?$qLrWP<@*d6QK-Yqg>@AAoCM9 zhZBDk)90SgJ;XI;qUWKsGbD33_R+&=oVyb%LX$h*UNLGtUdKhPF2Tz zEa7;4bbVGy8g&}kEj3T-H+TnZ2Tk_?aObRRq8fj`v zYg#R38}93}th9~2CxXrTsz+*;^=54%R$7-$mQ|N@8b!|6&LLe0&bYKW^+YJ9hHc2Tz#&J-^HIMhEK%}tLRx(zdrg8HewO_l3aUc! z#nmSujW)xNh(;o4b2wXAf(90x|HIq}8`JAnu`N&VrWG)6!yFS`W9Z3P)DnU{sl>q1Z=gv#s zK;W$)TIAcX_8NI4z$mBqo@u9__uju2HbhY(yYrp?WuI=3Z`yW34cV?nq5Q$u!4vSzsPZMsu-5qS)8)2nnx7!(Ze%5TXXYg@^rWdk3_bx5RDs6u6;vD zP2w+eZ(Kfms%ty^Ilj!5@{Pmv;&LE*fHr({QYLMYb<^%W<0-}m?x~vCIv6k|a&nMfyq^NfSOAb66n$=tLI=!0-deR>!rF3PZP3TS7Hr}=L_Ny(MxLqo? zi<>%)Z>PxH(UqAsJU>eLO3PgF&NMXx7bGn`Tw*rYJ1OntMJl|{lRLOQ$L{^TXS}B# ziq5<2NnQnSga&(7M6g3>P-c-+7D%0EPo7WePTKGR_}ut?`045G>Bz+PoVB~fBh%rA zD?`adMW3^My|zTB!`>6}5;}^$$@5uc&3PRLuxMzWa2*_IBgU?ew{^MWFTLy{+9fdo#u7_e=E+`R;Cuyi|6UPu6wN zt?{{9dX?;EZ`V5EFaa*AegEgDDlll;v^enYQ$jEWC9s^H8$9ETomWc6(4BD_i7f&B z0X#*WHSpq~k4xr`KbM6Ve%`BFR|qF%Q7|NF@Ph4>g4$Zar@u91eJT^N$arC_ke}1C zQjp(e6*IVeLthTDhn2N^rp~*-f{?u&Kf7fA%`(D`)ul{iWx;4bbyzS+aC|T*Pz@YZ z_`wPOQx^xP0{isObqFx95OXldf78f;j(>l#pz@dJU&l}J!C)|;GjvdK%YpbGYH&c# zr~j${LkT9NBqAjRB2qGRFgCVvG_!T8SnPcTU4XNb)Nlj?!~XiWfJ*_s`~k^dFjrQ0 zQkVVCZD?!Fpl@VrV9elVZ3m(T1LJk$234(%o%BiEtgUPux!w54{-NLo)&E{*BqRBU z#L1G6OkGxiM8wv?n1r2yiGhiXAD)DSgxA5ygc~3#{%>~B86TOMlan1cBcrRUD}yTw zgRO%pBQqBl7bDX*#&6%~K@{|k?lw;PZuB;eW_bzkjvU*v5mG|#eZUu8UV=E0&b8C># zKsxxDSy_4iq5uEf`CpCy#i{VYD!ZR)>6*Y4JVP=5Pnl4I{r!h$_vi8 zg$XJ{V#&O_M17scjACZ4>KNRRQ5J+!PXEL2v|4Pn(#SNXkhG1v(frR0{;kYbZW@{qywe?Vw`0))BAOob$f;m2)A%VXRxIBEc;Mnwc#Z`QS3g?%RrJ@ z2HL#Cx&7!)pj5k~~ zD~lA|0KBGmychq+#g`p7NDZKo-IdJ!lMoGe`iwVlZ5bH88@Xn7KlXIPO?CcOZ@(9i4y| zFxBHcH9y#*twwCrLshW2k>GKDI-kD) z_X8NL*>@vGN8yVWWWTnI=|;8bd5$FTD%G{P5hi#-C`dv-x-D-MHySe3Pef8HDfXzu z86+S(U?wlWG@sOQPoWA|OIOJ+`3X5|?D7vK+zed-gDZY9 zxZiggjet4eTxLYCbZjZCOn|bOAVm_LkOkmmQcVA=q{`2)LZxIR3DU_VY}C$&dDS4s z-gpufv{88F#fBgtn_*dRXJoycy%N^5EFwIlcBFsxjsv~ z7Sh}$p84(##Lw3KOOR$q2QLp%nW&ATNlRKVfHehzCAANvPPqasq-dJu*6$TJ&5WG? zp43W*HcU7uLh@JX(fhFx+)R-%*+VtR43!gqX1~NSJ#+IgEPtP+MiZ#d?UcK-(b{pS zI4~?+2}#mOzvYuj=2L=S-_;?|ficE$`yBb;)DtD#w%3y7y6A|ET`gvtbpjeiSLi?u z3%<5Ybl|eo;M{{uZ0Q`BA;d96_ViM<8#u2ibdGgQr(`UN%Cye`s0HKbab3>npwkk# zLFk#g2<+|%Aqz&K(!6Inko|S2;cH_5+=VVg1~7EVK|`XY%`Me)zyW3#eD4cVNG5dH z$p+>GX}YB@)w15Q`wE&_Mgy?Dc2$%TFfjCm%AkH--1>vu6caH*0cuO}2CmR3|4h}A z1U^nx-M87pF9)^odK8plOeHXJam^Sm2pm;fnAu3_zJ7z3O+YR#dbmQGfLXy>2Ib^3 zHy>+s;L}$r!?tKpmxxCp14$8>93~&k7VA(9i26yHNwfI#?LRgM*IK+WwmEFK?(fP% zbEeuLr;my~CG!j|7Q8Xu)`oJv2aSH7s(OmLQ!TdBuh}Wf>uWdF3}C(d#yUwW8C!a! z;tq?%MUp+HC$%kqQ{-l-bR@jQ)3WWX8S^%??AR<(-Ht;Pd^Fq^8s#pSY(_^k9bQsm z-n!2+KAZkfFq$m!G}uz%oY2)#iQ#x64HP>xLz$OH!162d+`Tg z_?nLKH<84OGvp2!!(m+Ae$h=FnV)-n^5{VKlw5lqArR=R1|b2_Lmt(s>_GPQmznEjesti9QquIkBuGJlI1C`1{OaESX8IzT+X-j= z#X<-j01l8u!;o+z1OhjWFe^i>hv8dZP7%a)OXMph_YRyWwvoRkKq)IXQCwf%e$Ozn z`HpzTY(_OYK!#` z8Ca6r^4`T7Q`_V@u)1@|EcS>YyfuM|Z!wx1xIi8b7Re!*SPKnB@njIlv4ZeF zNiNs!EoVbey6Mf}7gEUSYooVKflED26B?AJ&D0ihDaar3bn zoTScWn+!(dN>xx$kn_Do8uxpy5K?+aHh;2?7%Fr;D3Fnaf2*|u#Wt$B-$M9!XwjFH z9y@b!Z@tfZ*GyKAH?z^}zgGv+Jw_1qy#Hsdu9}pp;S0jK22Ae1NYWVW* zGecJ3;JaLaa~9IlH`?k4St8B%`|DVoEEjqL91&<9$#W8cF}IMWdC!Y3RJk#Yn3m?1 zrcN>tDVr}1?7Y}jXi~($g2PpgX)PcZJ$_gFpfLC5#F>of&TWh{&<(r08!Z8p> zq2RdLY|@beie$gPJq1Y$f{ZR7gaBlDi8eiIqw<ruV{4_e*M>>3$kY2#6>BAv@UGntipoPm`Q6`lbys5I;z_*A>7UN`rTz+C2!;d% zOD1De#3j>s0}flbg))L74dJ9}~_aArjkN{IO}jZPNh00syyvO&j4UzF}m_IMe9oRZ%Z z!|?nf$(9S9F!mD!)3V~oEQT#iPA9UjYXX^e}^iKPeMlv$i5Rc6ad6V;1SjMm5VSgJqkLf04#CiqvUt# zUIq88sIhV1c3hn)qV;OqOC8S0v`9wo)j;sF|A(Vh$4K^xoXQ}est;2t41$YPv%LbO zl)Mx>g@d$$+4!g-3&wpfo@QkI}ratAyqkEq4_i9I`4a$WFYZl1V0Tm`5Y_0Dln+G0PyS z)I<8+aj01jhyMQHgbkfsym_B%FkviRxK3o^*Fi)#SKV|P_6PyL4RpL2mq~Eq0w|hQ zSPpaEP=dy(8ht?Gjgi>cSKTfzqAb4ET;;HMSRM56U|TlyYEPZ5E9a-nwdFcHm(Sr5 zI1C2Q;Sbf$r9k8zQ5c`+ zeYdp-Nm|1*ATl_f#P~`&LV4ewdD#dgW*#JFE*f)UEL%00%xF;5>w4J~R-+aZs(6>0 z5!F}{IP>dy)8`F}e0^P^AenIO?Lbk_S3j^uTq9|Q?7u@u8U(e_T%@G12};0s6O&Q|`kdrY%1^H`!T}~q z`oDbp8@x^E{S#YUImi%se6*s5dC=ze*aM+7in*4X-F@zt^lKiq11TmH3l0bj=-v#I zuQ}k$XcSO+wRP?|ob>s)S{jq1<4ES?*}qdVih~27T%Ijk@0sTgy$wyoFQTT^60q zevF^!WK{ZY)J3~zvA(@np11V`CSny;@nSR4QuB!ItAdXcZ|R6&k2dYN1jgx*?upo}SD*w(UI~4_^+r36efZq@`iHXM z-G1Y#&8K7Gqw;f6SIkEJZOmPXCq;kC?Z-D=+MB0Q+c(E=zKdNc?^mf+6~3Q!MYz~+ ze7@3`y`^4eJ`ttP>fYP#mq^KhgYw=!P~NK!7^)toG!`!kGTpQISCTDDnK~=Q9rSe; zwGVoKw70>WP`#sj-iIr}wK(i$Gm7B&p)fK&ZZO}+Vy-xhOe~z2{E$lqkZ7|+B8wp+ z;f|%~9DDGcL6a|>SlAG}1n{u4vuppdAluIyDHIm}RiV=hO0%GwTLh}6rY1Bj%s(nB zs`#cgWD&8(zV!_X0bBHHXTTYSZG@7P6#U_GbBdEc^*~`OT0E;SxvJ-Iv%`~P_xV-p zM!d+xikBH#H-SeW$;;vM^*WC$svLP&`7vI(dP#h9)`iykNEoXyL->VuZ10_p=Xpcq z=~apw4dr1(_Nu`^IA2`h>y{_4mn1FUm#?{^Vd&ffo$-(G0!Y|EItA>57=i`EiP3#w zxIBos&1$2PZ@4`A-_FiX4wku9Xu_EN=PXUYR!l78I(t`sp)|2m#MW{~6AJ_f-9Vrb zxga1aLu+TY-c9@Fe6q5(hU&jRe}kb-4w@O)<-4*UORi_c3Y*J)oL!iBbRVOre?CLF zeQu12Wmr7a=5f^d@p)j@nLg%OzeFGDZ$`NC>HFW*yrM5v`_Ri}zT(I+RPGey z5#J9D{UJUK`>0)+i{5rJR%%lnw7(6yG_k{`9^xD9?z23R#i{tdE;~W_OBEE^#!S%;>51_ZH>55EZ1+E<}{e=Jh}S z!IA6K5)P}=oYGuHJ^$I-geecr^uD~F|!-e=(S@dQOyR-5}hbK%rNL11o4%2R%yP1^V zAvp0+G*J%~2c^?vA;D+3pVAsn;=H>{e|o%syKbQ(y5f`0+>(wAVgx#&Rs3wr)*%fA`%@$GU}K%!*8E2CC-B>(ycm-xqQ4*d+Qh46SGhxu~t{s2K_ zI+Iv9HrD7oqmfQ0tuQM^tj9Cd7HzHMK14V;)Ahj!Dc$p<|OyqB5?h_kFgpCc&aj3uJQTKM3i`W5+Ow0{w zE00ruxuoHjNUs%)+GqXo?rn$n4Xgu(Q}0*4qlY{3qC6BZLL{Ktck`nsWmGpv2hz*N z!2z9&j11M~g*|>)MX^zfOSw{6qggPq*3O-XHxzq;rA;^-yFqAwG%4FovD%U}1G*iP z9-!RJfsVeTP^kr_oVT0BHdWOVkQn3;wvmW27@g<*Q#ub<<=4?moY_(_^NQlE-)6?G z^vKPw`FD~``Kuy=6uSQ3_6dKaLgXYvi_`(7KdT&efL25!C*fU;DV9}{Uk z3C<7whq{fVWA$IGhFyo>zc&h>&fEH(%$Ff7(IaR_MxCnm`TD??F01w}Ow5&UK9hG^ z%_5Is!{lSIEx+6miyjj8Ic<)Z%~q1Px}1^<_F7E-F1x~ps-M~}5jeWz`a;YX z=y1F?S_#ia*1OAi{|pYjzg)sa66^=tz93OV%zgb4%K(qu3l4qk1VP<`0yx6=eQQA= zD1Lp&&v(}Q+N9eSoe7D6>3cd)n^FQr;75C_(Hx2tKeAJ)_91(FG*2*Jx*YEHDz&(6 zC>{TiR5gapBu~5Cv?-`xW6FWKN+ML+ef~Q)@E4ag{Ak=w#{z-#pV$rdkF#aj&MXt$ zi!8Ee}6$N5okK*aAp#VCYJArNybrOGAn8saJnLzBq19dF1qs^z~(>$*Nx zWG7ziaSzU-RV(;=GM0TnPd%uzJ_&e;H{US}e8J=~V+bNnX7rCp$4O(iWXMUtlGKQX z02;;FtW_g_kVniJV)`di3~j$zL0unK3b^ROYXFh^By!rk<-uphWli_-46F&c9B?t( z`4n2MxK1KV}x*swK16>wOUcF0xv!qR{id;)($k_}nfhG&<}&zAs77 z@(bM~^B9C(7m;S+YkD82aeXk`-;Jv@Zk#hHe9xa7$`rbUMB+n=+)7@B_EW_d-r9)k zQQx(bJz1SDY87>Xv3E!8Ft5^Ow`n96aDfB`>A{AvloAaOB*nM~h1JTeYNE|zZHdo55gvDZ z;+*gZWBR|y+tQ=SW9$!vFc%HzKXUB5uRi<)QcS{|lx&RqMrtW*OA7#zcn(EZan>1DrMTTj+L#GC_WJh>(y{D|>UoR#luStbYa!oQy&yR4*-9&# z5WnH{d=J#8b_&#`776u$#8bMeROgdDsoGaMv)+p)Q4AIahG=ee;u-YiE<>~@xmCc> z> znQ1hYL|Mi1?_>xbW#=1jl!b~IL;mn<$LS1bUfUi|Yw3#qtmM&i#MYj-`F^iUYCGhz z`O-Rm2H3tjb(nR$pQpWx%OK4?kW@}q2~V6KoSemZ!P%Uiq`~D1+mqB za|KgeH{yOIXt9zIlPEY<``Z=6?#a31J|_L%D()LhatO52a6U>J#@W*46ro(ld0S4a zHBx+^XvUWh+BSafgszrNKcSsYCwI~+YXMvF;h7{ViAq7};BhDDvs>Ik#_7JE$xA z({DV~AMDoswO@sBg?*%KT2D`kQ;)oy@%YtW-*X0r?8wVX!JsZ~8cgJ}!#90a8G3`( zikmuZI-YkbGh9Tf>cWsvkrQ^_ytJn+s}9Nc;riXX__r1+w4=D@s22*gDdXgQ-qET4 zyf2;$B>39%Yc{>$>ueZ8^~Wf%ET?y`b}Hd;&Wszkwx2?h2yz2`J*vF#N%nPKK6yU$ znzj-jfXOIz)>W1bjb`y37-Pr*l_ABNLI45e#~G0zwxE$AKv* zL%Y{3gsfA#w>95?@v`+vaQB&#tt99+V1y_G__Xm`VR@un#uF)I)8Uq@y>6RK{ck@& z+uSnMwVEI=__aok{hW4k%4G{f_}(LAx@?ml=O9phJTDH1&EZYkWO8l+*ii3wcH_pBK9-EYoyHoeP<1X#>s z1&)08-;#gIcmF~oR~Q*J=o}zdv%M@!zpR1WM#tE!RpbEu1zX z;4qoY+40U^YqT@}p>J+&Eq=A@L_g+fusK&#ud!kdh6>&~#-1u>T}C#Hh>01(K{zCJ zc+-Ri3&&yf7k%~tSsPe5@uPc60M&RjQSl0yIJyVsGO7n*gOJ&+xQp8qh|%FoEFJ>c zd)UzF=J2y4wv>AvVRKLC4=Q$+N{JAavq;wL4yy*ST<9Q$1>iY(bq}bws#qyc1^M{u# z8CzEL$18>pzf0m-yIiAtj%vkFk3A?^FkgdTtkfRp`2+)Nq%!T->$dx7wObH@gVy28 zXff@&G*)J_;!a-MisJv)AGX`{67(wLmx#1MP8i|0+s#-=unI?XN(Ok`Y`C|+&R zo?;m`yOA&^_r)2Jv*FTQ841J7wwB{eM~l2H(O^Wyop2tGgt)1(N1`-eGBd{sv0cAL zDh!tEFJ`{Xov*V_Tpwf`+(?tsdU#@hsuiiFzI9>hLYWB09gE@l#_qsGmIR!1(&l_W*0^U^7w-=Ikj@YG zJ2j5d?;bl z!giN@39b{vHs?2d25rueYb@Gaudj~2iR?7m-JFLD%NSFxCCm?z0d%1 z+uA8lsGVJmV&Z$EyBqAH&YfG2g0?z8<^0%ue^!5J{7%^PpTkKq!w%x%E9MUR?*mTu z+dc3J_*62|c|(lWbh{8lY+i~#IxO^0Z-!M^>p`EO<~Yf zvJ^NFcIX4Lqgi}bP8JpCbNMJb1nlw925Uz^E)IwpI?w-TwXU==OvCD#o@CF5+(s?Q{SJdFLBL*-fykWOU=ya-k-#CMbtKxO$rP-E$+}E zjw%1#`@m)D`lN~{?UoFr5@nV2E5D2jK&@3}9;=vxYhg1mFobeB!QLE94BTjYZ?SNO z3XamlfSac&IK*DU!%DKn^N>lBo5&3gCdn}S_K@)|HqtjRCDd*%mW)&xSI1pM{$cu_ z&JOh!IGES>p$UFm`t=u&HAFyQ2ssIpq--j)xDWm8*fDcp=ImQ=Vfzyjp|HY3Zi!M4 z#7qV}?UiG>pPw>$E_tBSWc!oZW~WG2AS3YgYP+w)We;>&LU@m;(^nJrd!xW^6|1k_W=EF&LaQ$KJyL^z$yQESFR!zf08 zgiM`nV^hmRZhohqX(|v)J9kJ#xX}RzFA)blDD-3P2;aL*mpy(+B9~AD`J9^cUl(B| zXB%S4WuPE|$rkEd*s<`Evt>bktl9`%waS8m7JoM<{~^@;|4HcbJyx!#P(_B>^Iogo z_uZY%mW2m_R((V#xhN9ukG}pa8oM{X>@ab{{?Avzv`Avngll&^ma#jUy7n+6e=Y1+ zlUWLnvC$7}fm8{LKoZVk~gPX4>70740pFel``J+rjiY-Ja-_AsZY3F znoOzSO4NoG;KwshrsA#1Z2K_=8Y*fismNRGxUJ^?sPL#S{bxg><9q8LXo3+|O_wv7 z8&>!Xw(M^z6i>G(R3H_h7j7g`eWO!-)sz;W(pb$SY3hG7Fh0gL7TnOECr-eKSLASP zYn#`^?+(T6rp%iDF1RGIfVu}RuFNthNZIPN{7OE2!PLphD%M_2*mx^)JwML&XcA~T z+vZW!d>xz<(*$$-==3&wGQeqQ?WEH*aDkv^~l{?cs9sf=e2?Z!U(|=G z0QWeTrW;MBjcBx9&DW?iv6FEQ(Iak#?NcVdSbM_YaXssH_3R}7wIOsTVUer7NMyFs z`bj#4{)407z1be=rOCGU-nqT??1XcSu|LbHHb_^_?t)u?R=dT{@Rtz7vvmqxYJgVjwRTkdlKsZX;XAUvq2g1 z$N4sR+1Q@1*~kuKjlq+H!;A}&GXaNKlaGi(n?A+~f%BAJXv-Z9{Y=*g8RfP5-$AJ- z0Y$w!@QE9)KJ6j+>rIWz74O>nE_RxdjNR?8nmyd|68xV#XU6OSHehqHemI{}(VyX> z<382Vps0jg=IFaM8gew4m`R_Ix7k|{c7PiM?_WgelJ4B#J-+o;{VCrKij74(S}Jk0 zSQI(9w@b^2W-i9WzzCGW5a`WXZyOoWka8jwP|DQx#i-o-8V^(dsDsDBPf0RS9PTw~ z2?_`JK~E7A>G{q0HLNM?_)0v0mTW%kH^St}wBSCN`#71Ec-8%6RS>sms^5!Zfgkku9wBl3pvK-2*d=abmDLMU77qsOqp^O zv$k{JeEB@@2JIj$g5a@cW?n4Q5EUH9eyzhZYBqz-7Re6KJ4k7DNwM7KL1mnB*amT4 zV~;$Jk4M$}u^N^PAHFJpVwvJ{oRGz@N%mUW*wY%EE2O9#TkS6VloH|w+4RF<*JfgT z4x4hVoo_~uQ(znP9!{Wb4xD!kqG;S}j(4h-9`CCpoxSv9tVEKJtuR(%Ru(m(&j_uCHs{sR?(_Gc57OrW(3C+ zYF!OI5f!qyd@$41=ms}3f9U0X;ptj~S}zf3;%|}KhPz**;rD(23`!*<3S?49lApy0 zSgqym+k>Gee$24hBvzfZD51r!{4hXgr2IPpo?v0dInUdN`xTEk|Yjst?+l4tOY;<$Z4%unxLPiU(dn}mzurMIyZ@ezM=5u zK>J4bf6jZdkuuv|hax;ue9sNB><#1fIDt-#ytQ7Z^@RO-w(vyOqPx**g4gKX0Y8U1 zfDx7c+vr2rE~(I-&2k=_@#$8Kz6zR^?6Od^w6QT93JBW3)XFCK>k}Gm(O7&9gVoH8 z4Et<~+RMDoQ8omDA+~GFsf1JAa{)-%>~k=Trwf?mW(T&JI1eNc4=Zl!Dfe%vau9;1Hl3*MY7T+nPiMmZp~}#c zQ$yU_Cc&6S>7nKfwX||FE1B%fB*c^YE}eYeJ!q_}ci(UCHeH1B91_|0_F`{UT}yo` z`V9pu)}%7(=UyfR1R$yrI`p&sbHdVw?P9ddqGa58! z@V$q@{AU}RfolC_i0^pE@}0+@;D8?h)Cn71GZS`D2Plb89v1wS*BS%`WVnT$BGKmZ zq!5=wmKf4`GxL}cfSoZIK*Os6%O&-(*p34yA5tWyXY4fCB=1m+gaC-ZEgu&BWnT$G z20Fq5b0Gk-HKyov2t1}_-{S=6N#>RR_AUuezG&+(7 z5!SGs-+%jIfShC=)<~k-Zw`6-OSlLvXmZAk0WGLv342ll=h|WG38f0f;(7{MsrN{T z|BkYL>{tuPTJj}yVD|4~@2Xs(BLQLY^Yd6h9%txZ9YX);!1#Wnxo%$4!4_dcYBg@x z&TU5p9rdnIV02_HU;9}?6L?QUdF7Dzx2LkM1{jVou4fP8xVvwQjM5lA^cLA2esN%Q zeddcSMG**}?10(P@Oa1umtnbKD~NZm_G5Ll{_^D#6V#e|tiP>c{w3sUH-$W&${MX& zOm^s9@&hggaCFS^`MmX3!S=^8552CS1r^Q9D`?eKs`x{&6m57=PiNa_V-IC6U<#3M zA?2YxR;t5A(2|QXHa>T5hu3Ll2qc~%f!DPiRx(@K{zTRjvnk;U!4Q^(swY{g26RAYHde{fkTlc??p#oqq$+pD2yMVP{A0xms3XSs{I zLgIO0DdvwKR?5_JN0c9HoAiit%Rf_W;a^QiJ-3)uM7uFWk3j&=mS9QrpY#Tgh@mb7>r&!CI5GBYk&gc`=7x!dWk7x zyEKXjhV9t>MVc7d{}pKv03OiIcWR)wkvJQZZh8A5+rc&zhhW zXaj2BioX7*V;W6y#-Ht>E)J}&kNH%a^4_m#-%B9w-}~kTc8>0Lweg z$^FW|V=fDnoz_uA4x~XjqVnp~aNnQZ#Jn_YRy*+*#vlvkV^>UXjhF%s<1FAsalVuA zxt?$$U#vt=Rw3nJA4|-T&6`tfbE*D?M>UgQV%^c+S>zF+BBzHQqh{w4UKSDoIVrzT z$4g}#$zq^}Qj@_zwf(a2IKBWjQGql$Gc)Pp#qODvuz^=Q#Iax8fA3jf2Ye9l*3dU8J=N32dP-CY6x{fkgoXmK-uHIud%ofVGGT2n;nKQ22){ zSNqjVVl^S9PB_N40w)6}Ct&CZu2XhpSORV{tDh_qQ?(8M#9P;55kfUH{4$G;?8s(- zOAnnU7uniZ;h6B(omLcfNK^FZg);w>kfnSz-b7bCJOVqz%z~XKdJHpeyKSVb#E;_v zm0{l47qt|jo&i6@?c5Ft4C9!ytE|l5sQzqpYluhY0vee{lXV5PFLv4%F6FRx>@@@!6eGG z2wVb!2VgGz8>dL)IxvwBwd`M2IdA#IV(#Djg16UGBh0I*8)B64 zfkF9pb*TtG#XI~Trzsy1jD@oOJfwY!Aw=gq(D!K{q@1$-6*ZV@8XgR`DaAUgE0FcCgLUzj^#NF z%;)&M&^PeV0$QC zw?W@HqemAjR;Ll1!){LCi#kWA0Bu%;af3YwT+arX_J> tQh*|rGB5xNC|25RJ#3{)^7emLzn}T6;NM66+Q3~z44$rjF6*2UngBBVqS^oe literal 0 HcmV?d00001 diff --git a/docs/index.adoc b/docs/index.adoc new file mode 100644 index 0000000..7d17380 --- /dev/null +++ b/docs/index.adoc @@ -0,0 +1,18 @@ +:toc: left +:toc-title: Verktygsboken +:toclevels: 4 +:icons: font +:source-highlighter: coderay +:docinfo: private-head +:sourcedir: docs/chapters +:imagesdir: img +:!figure-caption: +:hide-uri-scheme: +:experimental: +:book: + +include::chapters/flow_and_state/chapter.adoc[leveloffset=+1] +include::chapters/goals_and_tools/chapter.adoc[leveloffset=+1] +include::chapters/tools/chapter.adoc[leveloffset=+1] +include::chapters/combining_tools/chapter.adoc[leveloffset=+1] +include::chapters/tool_centered_assignments/chapter.adoc[leveloffset=+1] \ No newline at end of file