mirror of
https://github.com/adambard/learnxinyminutes-docs.git
synced 2025-09-03 03:33:15 +02:00
Simplify language codes in directories
This commit is contained in:
244
nl/amd.md
Normal file
244
nl/amd.md
Normal file
@@ -0,0 +1,244 @@
|
||||
---
|
||||
category: tool
|
||||
tool: AMD
|
||||
contributors:
|
||||
- ["Frederik Ring", "https://github.com/m90"]
|
||||
translators:
|
||||
- ["Reinoud Kruithof", "https://github.com/reinoudk"]
|
||||
filename: learnamd-nl.js
|
||||
lang: nl-nl
|
||||
---
|
||||
|
||||
## Aan de slag met AMD
|
||||
|
||||
De **Asynchronous Module Definition** API specificeert een mechanisme om JavaScript
|
||||
modules the definiëren zodat de module en dependencies (afhankelijkheden) asynchroon
|
||||
geladen kunnen worden. Dit is vooral erg geschikt voor de browseromgeving, waar het
|
||||
synchroon laden van modules zorgt voor problemen qua prestatie, gebruiksvriendelijkheid,
|
||||
debugging en cross-domain toegangsproblemen.
|
||||
|
||||
### Basis concept
|
||||
|
||||
```javascript
|
||||
// De basis AMD API bestaat uit niks meer dan twee methodes: `define` en `require`
|
||||
// and gaat vooral over de definitie en gebruik van modules:
|
||||
// `define(id?, dependencies?, factory)` definieert een module
|
||||
// `require(dependencies, callback)` importeert een set van dependencies en
|
||||
// gebruikt ze in de gegeven callback
|
||||
|
||||
// Laten we starten met het gebruiken van define om een nieuwe module (met naam)
|
||||
// te creëeren, welke geen dependencies heeft. Dit doen we door een naam
|
||||
// en een zogeheten factory functie door te geven aan define:
|
||||
define('awesomeAMD', function(){
|
||||
var isAMDAwesome = function(){
|
||||
return true;
|
||||
};
|
||||
// De return waarde van een module's factory functie is
|
||||
// wat andere modules of require calls ontvangen wanneer
|
||||
// ze onze `awesomeAMD` module requiren.
|
||||
// De geëxporteerde waarde kan van alles zijn: (constructor) functies,
|
||||
// objecten, primitives, zelfs undefined (hoewel dat niet veel nut heeft).
|
||||
return isAMDAwesome;
|
||||
});
|
||||
|
||||
|
||||
// We gaan nu een andere module defineren die afhankelijk is van onze
|
||||
// `awesomeAMD` module. Merk hierbij op dat er nu een extra functieargument
|
||||
// is die de dependencies van onze module defineert:
|
||||
define('schreewlelijk', ['awesomeAMD'], function(awesomeAMD){
|
||||
// dependencies worden naar de factory's functieargumenten
|
||||
// gestuurd in de volgorde waarin ze gespecificeert zijn
|
||||
var vertelIedereen = function(){
|
||||
if (awesomeAMD()){
|
||||
alert('Dit is zOoOo cool!');
|
||||
} else {
|
||||
alert('Vrij saai, niet?');
|
||||
}
|
||||
};
|
||||
return vertelIedereen;
|
||||
});
|
||||
|
||||
// Nu we weten hoe we define moeten gebruiken, kunnen we require gebruiken
|
||||
// om ons programma mee te starten. De vorm van `require` is
|
||||
// `(arrayVanDependencies, callback)`.
|
||||
require(['schreeuwlelijk'], function(schreewlelijk){
|
||||
schreeuwlelijk();
|
||||
});
|
||||
|
||||
// Om deze tutorial code uit te laten voeren, gaan we hier een vrij basic
|
||||
// (niet-asynchrone) versie van AMD implementeren:
|
||||
function define(naam, deps, factory){
|
||||
// merk op hoe modules zonder dependencies worden afgehandeld
|
||||
define[naam] = require(factory ? deps : [], factory || deps);
|
||||
}
|
||||
|
||||
function require(deps, callback){
|
||||
var args = [];
|
||||
// we halen eerst alle dependecies op die nodig zijn
|
||||
// om require aan te roepen
|
||||
for (var i = 0; i < deps.length; i++){
|
||||
args[i] = define[deps[i]];
|
||||
}
|
||||
// voldoe aan alle dependencies van de callback
|
||||
return callback.apply(null, args);
|
||||
}
|
||||
// je kan deze code hier in actie zien (Engels): http://jsfiddle.net/qap949pd/
|
||||
```
|
||||
|
||||
### require.js in de echte wereld
|
||||
|
||||
In contrast met het voorbeeld uit de introductie, implementeert `require.js`
|
||||
(de meest populaire AMD library) de **A** in **AMD**. Dit maakt het mogelijk
|
||||
om je modules en hun dependencies asynchroon in the laden via XHR:
|
||||
|
||||
```javascript
|
||||
/* file: app/main.js */
|
||||
require(['modules/someClass'], function(SomeClass){
|
||||
// de callback word uitgesteld tot de dependency geladen is
|
||||
var things = new SomeClass();
|
||||
});
|
||||
console.log('Dus, hier wachten we!'); // dit wordt als eerste uitgevoerd
|
||||
```
|
||||
|
||||
De afspraak is dat je over het algemeen één module in één bestand opslaat.
|
||||
`require.js` kan module-namen achterhalen gebaseerd op de bestandslocatie,
|
||||
dus je hoeft je module geen naam te geven. Je kan simpelweg aan ze referen
|
||||
door hun locatie te gebruiken.
|
||||
In het voorbeeld nemen we aan dat `someClass` aanwezig is in de `modules` map,
|
||||
relatief ten opzichte van de `baseUrl` uit je configuratie.
|
||||
|
||||
* app/
|
||||
* main.js
|
||||
* modules/
|
||||
* someClass.js
|
||||
* someHelpers.js
|
||||
* ...
|
||||
* daos/
|
||||
* things.js
|
||||
* ...
|
||||
|
||||
Dit betekent dat we `someClass` kunnen defineren zonder een module-id te specificeren:
|
||||
|
||||
```javascript
|
||||
/* file: app/modules/someClass.js */
|
||||
define(['daos/things', 'modules/someHelpers'], function(thingsDao, helpers){
|
||||
// definitie van de module gebeurt, natuurlijk, ook asynchroon
|
||||
function SomeClass(){
|
||||
this.method = function(){/**/};
|
||||
// ...
|
||||
}
|
||||
return SomeClass;
|
||||
});
|
||||
```
|
||||
|
||||
Gebruik `requirejs.config(configObj)` om het gedrag van de standaard mapping
|
||||
aan te passen in je `main.js`:
|
||||
|
||||
```javascript
|
||||
/* file: main.js */
|
||||
requirejs.config({
|
||||
baseUrl : 'app',
|
||||
paths : {
|
||||
// je kan ook modules uit andere locatie inladen
|
||||
jquery : '//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min',
|
||||
coolLibUitBower : '../bower_components/cool-lib/coollib'
|
||||
}
|
||||
});
|
||||
require(['jquery', 'coolLibUitBower', 'modules/someHelpers'], function($, coolLib, helpers){
|
||||
// een `main` bestand moet require minstens eenmaal aanroepen,
|
||||
// anders zal er geen code uitgevoerd worden
|
||||
coolLib.doFancyDingenMet(helpers.transform($('#foo')));
|
||||
});
|
||||
```
|
||||
|
||||
Op `require.js` gebaseerde apps hebben vaak een enkel beginpunt (`main.js`)
|
||||
welke toegevoegd wordt aan de `require.js` script tag als een data-attribuut.
|
||||
Deze zal automisch geladen en uitgevoerd worden als de pagina laadt:
|
||||
|
||||
```html
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>Honder script tags? Nooi meer!</title>
|
||||
</head>
|
||||
<body>
|
||||
<script src="require.js" data-main="app/main"></script>
|
||||
</body>
|
||||
</html>
|
||||
```
|
||||
|
||||
### Een heel project optimaliseren met r.js
|
||||
|
||||
Veel mensen geven er de voorkeur aan om AMD te gebruiken tijdens de
|
||||
ontwikkelfase om code op een gezonde manier te organiseren maar
|
||||
willen nog steeds een enkel scriptbestand gebruiken in productie in
|
||||
plaats van honderderen XHR verzoeken uit te voeren als de pagina laadt.
|
||||
|
||||
`require.js` wordt geleverd met een script genaamd `r.js` (die je waarschijnlijk
|
||||
uitvoert in node.js, hoewel Rhino ook ondersteund wordt) welke de
|
||||
dependency book van je project analyseert en een enkel bestand bouwt met daarin
|
||||
al je module (juist genaamd), geminificeerd en klaar voor productie.
|
||||
|
||||
Instaleren met `npm`:
|
||||
|
||||
```shell
|
||||
$ npm install requirejs -g
|
||||
```
|
||||
|
||||
Nu kun je het een configuratiebestand voeden:
|
||||
|
||||
```shell
|
||||
$ r.js -o app.build.js
|
||||
```
|
||||
|
||||
Voor ons bovenstaande voorbeeld zou de configuratie er zo uit kunnen zien:
|
||||
|
||||
```javascript
|
||||
/* file : app.build.js */
|
||||
({
|
||||
name : 'main', // naam van het beginpunt
|
||||
out : 'main-built.js', // naam van het bestand waar de output naar geschreven wordt
|
||||
baseUrl : 'app',
|
||||
paths : {
|
||||
// `empty:` verteld r.js dat dee nog steeds geladen moet worden van de CDN,
|
||||
// gebruik makend van de locatie gespecificeert in `main.js`
|
||||
jquery : 'empty:',
|
||||
coolLibUitBower : '../bower_components/cool-lib/coollib'
|
||||
}
|
||||
})
|
||||
```
|
||||
|
||||
Verwissel simpelweg `data-main` om het gebouwde bestand te gebruiken in productie:
|
||||
|
||||
```html
|
||||
<script src="require.js" data-main="app/main-built"></script>
|
||||
```
|
||||
|
||||
Een erg gedetaileerd [overzicht van bouwopties](https://github.com/jrburke/r.js/blob/master/build/example.build.js) is
|
||||
beschikbar in de GitHub repo (Engels).
|
||||
|
||||
Hieronder vind je nog meer informatie over AMD (Engels).
|
||||
|
||||
### Onderwerpen die niet aan bod zijn gekomen
|
||||
|
||||
* [Loader plugins / transforms](http://requirejs.org/docs/plugins.html)
|
||||
* [CommonJS style loading and exporting](http://requirejs.org/docs/commonjs.html)
|
||||
* [Advanced configuration](http://requirejs.org/docs/api.html#config)
|
||||
* [Shim configuration (loading non-AMD modules)](http://requirejs.org/docs/api.html#config-shim)
|
||||
* [CSS loading and optimizing with require.js](http://requirejs.org/docs/optimization.html#onecss)
|
||||
* [Using almond.js for builds](https://github.com/jrburke/almond)
|
||||
|
||||
### Verder lezen:
|
||||
|
||||
* [Official Spec](https://github.com/amdjs/amdjs-api/wiki/AMD)
|
||||
* [Why AMD?](http://requirejs.org/docs/whyamd.html)
|
||||
* [Universal Module Definition](https://github.com/umdjs/umd)
|
||||
|
||||
### Implementaties:
|
||||
|
||||
* [require.js](http://requirejs.org)
|
||||
* [dojo toolkit](http://dojotoolkit.org/documentation/tutorials/1.9/modules/)
|
||||
* [cujo.js](http://cujojs.com/)
|
||||
* [curl.js](https://github.com/cujojs/curl)
|
||||
* [lsjs](https://github.com/zazl/lsjs)
|
||||
* [mmd](https://github.com/alexlawrence/mmd)
|
234
nl/bash.md
Normal file
234
nl/bash.md
Normal file
@@ -0,0 +1,234 @@
|
||||
---
|
||||
language: Bash
|
||||
contributors:
|
||||
- ["Max Yankov", "https://github.com/golergka"]
|
||||
- ["Darren Lin", "https://github.com/CogBear"]
|
||||
- ["Alexandre Medeiros", "http://alemedeiros.sdf.org"]
|
||||
- ["Denis Arh", "https://github.com/darh"]
|
||||
- ["akirahirose", "https://twitter.com/akirahirose"]
|
||||
- ["Anton Strömkvist", "http://lutic.org/"]
|
||||
- ["Rahil Momin", "https://github.com/iamrahil"]
|
||||
- ["Gregrory Kielian", "https://github.com/gskielian"]
|
||||
- ["Etan Reisner", "https://github.com/deryni"]
|
||||
translators:
|
||||
- ["Jeroen Deviaene", "https://www.github.com/jerodev"]
|
||||
lang: nl-nl
|
||||
filename: LearnBash-nl.sh
|
||||
---
|
||||
|
||||
Bash is de naam van de unix shell, deze wordt gebruikt voor het GNU operating system en is de standaard shell op Linux en macOS.
|
||||
Bijna alle voorbeelden hieronder kunnen deel uitmaken van een shell script of kunnen uitgevoerd worden in de shell.
|
||||
|
||||
[Lees er meer over hier.](http://www.gnu.org/software/bash/manual/bashref.html)
|
||||
|
||||
```bash
|
||||
#!/bin/bash
|
||||
# De eerste lijn in het schript is shebang, deze laat het systeem weten hoe
|
||||
# het script uitgevoerd moet worden: http://en.wikipedia.org/wiki/Shebang_(Unix)
|
||||
# Zoals je kan zien wordt # gebruikt om een commentaar lijn te starten.
|
||||
|
||||
# Een simpel hello world voorbeeld:
|
||||
echo Hello world!
|
||||
|
||||
# Elk commando start op een nieuwe lijn, of achter een puntkomma (;):
|
||||
echo 'Dit is de eerste lijn'; echo 'Dit is de tweede lijn'
|
||||
|
||||
# Een variabele declareren gebeurt op volgende manier:
|
||||
Variabele="Een string"
|
||||
|
||||
# Maar niet op deze manier:
|
||||
Variabele = "Een string"
|
||||
# Bash ziet variabelen als een commando en zal een error geven omdat dit commando
|
||||
# niet bestaat.
|
||||
|
||||
# Of op deze manier:
|
||||
Variabele= 'Een string'
|
||||
# Bash zal 'Een string' zien als een commando en een error geven omdat het niet
|
||||
# gevonden kan worden.
|
||||
|
||||
# Variabelen gebruiken:
|
||||
echo $Variabele
|
||||
echo "$Variabele"
|
||||
echo '$Variabele'
|
||||
# Wanneer je een variable wil toekennen, exporteren of nog anders gebruik je
|
||||
# de naam zonder '$'. Als je de waarde van de variabele wilt, gebruik je een
|
||||
# '$' voor de naam.
|
||||
|
||||
# Strings vervangen in variables
|
||||
echo ${Variabele/Een/De}
|
||||
# Dit zal 'Een' vervangen door 'De' in de string
|
||||
|
||||
# Substring
|
||||
Length=7
|
||||
echo ${Variabele:0:Length}
|
||||
# Dit zal de eerste 7 tekens van de string weergeven.
|
||||
|
||||
# Standaard waarde voor variabele
|
||||
echo ${Foo:-"StandaardwaardeAlsFooLeegIsOfNietBestaat"}
|
||||
# Dit werkt voor null en lege strings (Foo=""). Dit werkt niet voor 0 (Foo=0).
|
||||
# Merk op dat dit enkel de waarde retourneerd en de variable niet aanpast.
|
||||
|
||||
|
||||
# Ingebouwde variabelen:
|
||||
# Er zijn enkele zeer handige ingebouwde variabelen, zoals:
|
||||
echo "Return waarde van laatste programma: $?"
|
||||
echo "PID van dit script: $$"
|
||||
echo "Aantal argumenten voor dit script: $#"
|
||||
echo "Alle argumenten voor dit script: $@"
|
||||
echo "Argumenten voor dit script in apparte variabelen: $1 $2..."
|
||||
|
||||
# Een waarde lezen via input:
|
||||
echo "Wat is uw naam?"
|
||||
read Naam # Merk op dat we geen variabele gedeclareerd hebben
|
||||
echo Hallo, $Naam!
|
||||
|
||||
# We hebben ook logische if structuren
|
||||
# Gebruik 'man test' voor meer informatie over condities.
|
||||
if [ $Naam -ne $USER ]
|
||||
then
|
||||
echo "Uw naam is niet gelijk aan de gebruikersnaam"
|
||||
else
|
||||
echo "Uw naam is de gebruikersnaam"
|
||||
fi
|
||||
|
||||
# MERK OP: als $Naam leeg is ziet bash het bovenstaande als volgt:
|
||||
if [ -ne $USER ]
|
||||
# dit is ongeldige syntax
|
||||
# Dus de beter manier om dit te schrijven is
|
||||
if [ "$Naam" -ne $USER ] ...
|
||||
# Als naam nu leeg is, ziet bash nu nog steeds
|
||||
if [ "" -ne $USER ] ...
|
||||
# Dit werkt wel zoals het hoort
|
||||
|
||||
# Er is ook conditionele executie
|
||||
echo "Altijd uitvoeren" || echo "Enkel uitvoeren als vorige command mislukt"
|
||||
echo "Altijd uitvoeren" && echo "Enkel uitvoeren als vorige command NIET mislukt"
|
||||
|
||||
# Om && en || te gebruiken in if structuren moeten vierkante haken gebruikt worden:
|
||||
if [ "$Naam" == "Steve" ] && [ "$Leeftijd" -eq 15 ]
|
||||
then
|
||||
echo "Dit wordt uitgevoerd als $Naam Steve is en $Leeftijd 15 is."
|
||||
fi
|
||||
|
||||
# Expressies worden gemaakt met volgende syntax:
|
||||
echo $(( 10 + 5 ))
|
||||
|
||||
# Bash werkt steeds in de context van een huidige map in het bestandssysteem.
|
||||
# Bestanden en mappen in de huidige map kunnen weergegeven worden met het ls
|
||||
# commando.
|
||||
ls
|
||||
|
||||
# Commandos hebben opties die de uitvoer beinvloeden
|
||||
ls -l # Lijst elk bestand en map op een nieuwe lijn.
|
||||
|
||||
# Resultaten van een vorig commando kunnen doorgegeven worden aan een volgend
|
||||
# commando als input.
|
||||
# Het grep commando filter de input met een bepaald patroon. Op deze manier kunnen
|
||||
# we alle .txt bestanden weergeven in de huidige map.
|
||||
ls -l | grep "\.txt"
|
||||
|
||||
# Commando's kunnen gekoppeld worden met andere commando's door gebruik te maken van
|
||||
# $( ):
|
||||
# Het volgende commando geeft het aantal bestanden weer in de huidige map
|
||||
echo "Er zijn hier $(ls | wc -l) bestanden."
|
||||
|
||||
# Het zelfde kan gedaan worden met `, maar die kunnen niet genest worden. De methode
|
||||
# bij voorkeur is om $( ) te gebruiken.
|
||||
echo "Er zijn hier `ls | wc -l` bestanden."
|
||||
|
||||
# Bash heeft een case statement dat werkt zoals in Java en C++
|
||||
case "$Variabele" in
|
||||
0) echo "Er is een 0";;
|
||||
1) echo "Er is een 1";;
|
||||
*) echo "Er is iets";;
|
||||
esac
|
||||
|
||||
# For lussen itereren over de gegeven argumenten
|
||||
# De waarde van $Variabele wordt hier drie keer afgeprint
|
||||
for Variable in {1..3}
|
||||
do
|
||||
echo "$Variabele"
|
||||
done
|
||||
|
||||
# Of schrijf een traditionele for loop op deze manier
|
||||
for ((a=1; a <= 3; a++))
|
||||
do
|
||||
echo $a
|
||||
done
|
||||
|
||||
# Lussen kunnen ook gebruikt worden met bestanden
|
||||
# Deze lus voert het cat commando uit op file1 en file2
|
||||
for Variable in file1 file2
|
||||
do
|
||||
cat "$Variable"
|
||||
done
|
||||
|
||||
# Of met het output commando
|
||||
for Output in $(ls)
|
||||
do
|
||||
cat "$Output"
|
||||
done
|
||||
|
||||
# while lus:
|
||||
while [ true ]
|
||||
do
|
||||
echo "body van de lus..."
|
||||
break
|
||||
done
|
||||
|
||||
# Je kan ook functies aanmaken
|
||||
# Defenitie:
|
||||
function foo ()
|
||||
{
|
||||
echo "Alle argumenten: $@"
|
||||
echo "Apparte argumenten: $1 $2..."
|
||||
echo "Dit is een functie"
|
||||
return 0
|
||||
}
|
||||
|
||||
# Of simpeler
|
||||
bar ()
|
||||
{
|
||||
echo "Dit is een andere manier om functies te maken."
|
||||
return 0
|
||||
}
|
||||
|
||||
# Functies oproepen
|
||||
foo "Mijn naam is" $Naam
|
||||
|
||||
# Enkele zeer handige commando's die je moet kennen
|
||||
# print de laatste 10 lijnen van file.txt
|
||||
tail -n 10 file.txt
|
||||
# print de eerste 10 lijnen van file.txt
|
||||
head -n 10 file.txt
|
||||
# Sorteer de lijnen in file.txt
|
||||
sort file.txt
|
||||
# Vind dubbele lijnen in file.txt
|
||||
uniq -d file.txt
|
||||
# Print de eerste kolom voor het ',' karakter
|
||||
cut -d ',' -f 1 file.txt
|
||||
# Vervang elke 'okay' met 'great' in file.txt (werkt ook met regex)
|
||||
sed -i 's/okay/great/g' file.txt
|
||||
# Print alle lijnen die voldoen aan de regex naar stdout
|
||||
grep "^foo.*bar$" file.txt
|
||||
|
||||
|
||||
# Gebruik de ingebouwde help functies door het help commando te gebruiken:
|
||||
help
|
||||
help help
|
||||
help for
|
||||
help return
|
||||
help source
|
||||
help .
|
||||
|
||||
# Lees de bash documentatie met het man commando:
|
||||
apropos bash
|
||||
man 1 bash
|
||||
man bash
|
||||
|
||||
# Lees bash info documentatie:
|
||||
info bash
|
||||
info bash 'Bash Features'
|
||||
info bash 6
|
||||
info --apropos bash
|
||||
```
|
87
nl/bf.md
Normal file
87
nl/bf.md
Normal file
@@ -0,0 +1,87 @@
|
||||
---
|
||||
language: BF
|
||||
filename: learnbf-nl.bf
|
||||
contributors:
|
||||
- ["Prajit Ramachandran", "http://prajitr.github.io/"]
|
||||
- ["Mathias Bynens", "http://mathiasbynens.be/"]
|
||||
translators:
|
||||
- ["Jelle Besseling", "https://github.com/Jell-E"]
|
||||
lang: nl-nl
|
||||
---
|
||||
|
||||
Brainfuck (schrijf je niet met een hoofdletter behalve aan het begin van een
|
||||
zin) is een extreem
|
||||
minimalistische Turing-complete programmeertaal met maar acht commando's.
|
||||
|
||||
```bf
|
||||
Elk karakter behalve "><+-.,[]" (en de quotes) wordt genegeerd.
|
||||
|
||||
Brainfuck wordt gerepresenteerd door een array met 30.000 cellen die initieel
|
||||
gevuld is met nullen en een pointer die wijst naar de huidige cel.
|
||||
|
||||
Dit zijn de acht commando's:
|
||||
+ : Verhoog de huidige cell met 1.
|
||||
- : Verminder de huidige cell met 1.
|
||||
> : Beweeg de pointer naar de volgende cell (één naar rechts).
|
||||
< : Beweeg de pointer naar de vorige cell (één naar links).
|
||||
. : Print de huidige cell als een ASCII karakter(d.w.z. 65 = 'A').
|
||||
, : Lees een karakter in de huidige cell.
|
||||
[ : Als de huidige cell nul is ga dan naar de bijbehorende ] .
|
||||
Als het geen nul is, ga dan gewoon verder.
|
||||
] : Als de huidige cell nul is ga dan gewoon verder.
|
||||
Als het geen nul is, ga dan terug naar de bijbehorende [ .
|
||||
|
||||
[ en ] maken een while loop. Ze moeten uiteraard wel gebalanceerd zijn
|
||||
|
||||
Laten we een kijkje nemen naar een paar brainfuck programma's.
|
||||
|
||||
++++++ [ > ++++++++++ < - ] > +++++ .
|
||||
|
||||
Dit programma print het karakter 'A'. Eerst verhoogt het cell #1 tot 6.
|
||||
Cell #1 wordt gebruikt om te loopen. Dan begint het de loop ([) en gaat
|
||||
naar cell #2. Het verhoogt cell #2 tien keer, gaat terug naar cell #1, en
|
||||
verlaagt cell #1. Deze loop gebeurt zes keer (na zes keer staat cell #1
|
||||
weer op nul, waarna het doorgaat naar het einde van de loop (]) en
|
||||
verder gaat).
|
||||
|
||||
De pointer staat nu weer op cell #1, deze heeft een waarde van 0, en cell #2
|
||||
heeft een waarde van 60. > beweegt de pointer naar cell #2, daarna verhoogt
|
||||
het de cell vijf keer, waardoor het een waarde van 65 bevat, en print dan
|
||||
de waarde van cell #2. 65 is 'A' in ASCII, dus 'A' wordt geprint in de terminal.
|
||||
|
||||
|
||||
, [ > + < - ] > .
|
||||
|
||||
Dit programma leest een karakter van de gebruiker in put en kopieert dat
|
||||
karakter in cel #1. Dan start de loop. Ga naar cel #2, verhoog de waarde in
|
||||
cel #2, ga terug naar cel #1, en verklein de waarde in cel #1. Dit gaat door
|
||||
totdat cel #1 nul is en cel #2 de oude waarde heeft van cell #1. Omdat we
|
||||
op cel #1 staan verplaatst > de pointer één naar rechts en . print het
|
||||
karakter in cel #2.
|
||||
|
||||
Houd wel in gedachten dat de spaties alleen zijn voor leesbaarheid, je kan het
|
||||
bovenstaande programma net zo goed schrijven als:
|
||||
|
||||
,[>+<-]>.
|
||||
|
||||
Probeer maar eens te bedenken wat het volgende programma doet:
|
||||
|
||||
,>,< [ > [ >+ >+ << -] >> [- << + >>] <<< -] >>
|
||||
|
||||
Dit programma neemt twee getallen als input, en vermenigvuldigt ze.
|
||||
|
||||
In het begin leest het twee karakters in cel #1 en #2. Dan start het de
|
||||
buitenste loop, met als teller cel #1. Het beweegt naar cel #2, dan start het
|
||||
de binnenste loop met als teller cel #2, daar verhoogd het cel #3. Maar
|
||||
dan is er een probleem als cel #2 nul wordt aan het einde van de binnenste loop.
|
||||
Om dit op te lossen wordt ook cel #4 verhoogd naar het oorspronkelijke getal
|
||||
uit cel #2 en daarna wordt cel #4 weer gekopieerd naar cell #2.
|
||||
Het resultaat komt in cel #3 te staan.
|
||||
```
|
||||
|
||||
En dat is dan brainfuck. Niet heel moeilijk, toch? Je kan zelf voor de lol
|
||||
brainfuck programma's gaan schrijven, of je kan een interpreter schrijven
|
||||
voor brainfuck in een andere taal. Het is namelijk redelijk makkelijk om te
|
||||
implementeren aangezien brainfuck maar acht commando's heeft. En als je een
|
||||
masochist bent kan je ook nog proberen om brainfuck te implementeren… in
|
||||
brainfuck.
|
111
nl/coffeescript.md
Normal file
111
nl/coffeescript.md
Normal file
@@ -0,0 +1,111 @@
|
||||
---
|
||||
language: CoffeeScript
|
||||
contributors:
|
||||
- ["Tenor Biel", "http://github.com/L8D"]
|
||||
- ["Xavier Yao", "http://github.com/xavieryao"]
|
||||
translators:
|
||||
- ["Jelle Besseling", "https://github.com/Jell-E"]
|
||||
- ["D.A.W. de Waal", "http://github.com/diodewaal"]
|
||||
- ["Sam van Kampen", "http://tehsvk.net"]
|
||||
filename: coffeescript-nl.coffee
|
||||
lang: nl-nl
|
||||
---
|
||||
|
||||
CoffeeScript is een kleine programmeertaal die direct compileert naar
|
||||
JavaScript en er is geen interpretatie tijdens het uitvoeren.
|
||||
CoffeeScript probeert om leesbare, goed geformatteerde en goed draaiende
|
||||
JavaScript code te genereren, die in elke JavaScript-runtime werkt, als een
|
||||
opvolger van JavaScript.
|
||||
|
||||
Op [de CoffeeScript-website](http://coffeescript.org/), staat een
|
||||
volledigere tutorial voor CoffeeScript.
|
||||
|
||||
``` coffeescript
|
||||
# CoffeeScript is een taal voor hipsters.
|
||||
# Het gaat mee met alle trends van moderne talen.
|
||||
# Commentaar begint dus met een hekje, net zoals bij Python en Ruby.
|
||||
|
||||
###
|
||||
Blokken commentaar maak je zo, ze vertalen naar JavaScripts */ en /*
|
||||
in de uitvoer van de CoffeeScript-compiler.
|
||||
|
||||
Het is belangrijk dat je ongeveer snapt hoe JavaScript
|
||||
werkt voordat je verder gaat.
|
||||
###
|
||||
|
||||
# Toewijzing:
|
||||
getal = 42 #=> var getal = 42;
|
||||
tegengestelde = true #=> var tegengestelde = true;
|
||||
|
||||
# Voorwaarden:
|
||||
getal = -42 if tegengestelde #=> if(tegengestelde) { getal = -42; }
|
||||
|
||||
# Functies:
|
||||
kwadraat = (x) -> x * x #=> var kwadraat = function(x) { return x * x; }
|
||||
|
||||
vul = (houder, vloeistof = "koffie") ->
|
||||
"Nu de #{houder} met #{vloeistof} aan het vullen..."
|
||||
#=>var vul;
|
||||
#
|
||||
#vul = function(houder, vloeistof) {
|
||||
# if (vloeistof == null) {
|
||||
# vloeistof = "koffie";
|
||||
# }
|
||||
# return "Nu de " + houder + " met " + vloeistof + " aan het vullen...";
|
||||
#};
|
||||
|
||||
# Reeksen:
|
||||
lijst = [1..5] #=> var lijst = [1, 2, 3, 4, 5];
|
||||
|
||||
# Objecten:
|
||||
wiskunde =
|
||||
wortel: Math.sqrt
|
||||
kwadraat: kwadraat
|
||||
derdemacht: (x) -> x * kwadraat x
|
||||
#=> var wiskunde = {
|
||||
# "wortel": Math.sqrt,
|
||||
# "kwadraat": kwadraat,
|
||||
# "derdemacht": function(x) { return x * kwadraat(x); }
|
||||
#}
|
||||
|
||||
# "Splats":
|
||||
wedstrijd = (winnaar, lopers...) ->
|
||||
print winnaar, lopers
|
||||
#=>wedstrijd = function() {
|
||||
# var lopers, winnaar;
|
||||
# winnaar = arguments[0], lopers = 2 <= arguments.length ? __slice.call(arguments, 1) : [];
|
||||
# return print(winnaar, lopers);
|
||||
#};
|
||||
|
||||
# Aanwezigheid:
|
||||
alert "Ik wist het!" if elvis?
|
||||
#=> if(typeof elvis !== "undefined" && elvis !== null) { alert("I knew it!"); }
|
||||
|
||||
# Lijstabstracties:
|
||||
derdemachten = (wiskunde.derdemacht num for num in lijst)
|
||||
#=>derdemachten = (function() {
|
||||
# var _i, _len, _results;
|
||||
# _results = [];
|
||||
# for (_i = 0, _len = lijst.length; _i < _len; _i++) {
|
||||
# num = list[_i];
|
||||
# _results.push(wiskunde.derdemacht(num));
|
||||
# }
|
||||
# return _results;
|
||||
# })();
|
||||
|
||||
etenswaren = ['broccoli', 'spinazie', 'chocolade']
|
||||
eet eten for eten in etenswaren when eten isnt 'chocolade'
|
||||
#=>etenswaren = ['broccoli', 'spinazie', 'chocolade'];
|
||||
#
|
||||
#for (_k = 0, _len2 = etenswaren.length; _k < _len2; _k++) {
|
||||
# eten = etenswaren[_k];
|
||||
# if (eten !== 'chocolade') {
|
||||
# eet(eten);
|
||||
# }
|
||||
#}
|
||||
```
|
||||
|
||||
## Handige links (in het Engels):
|
||||
|
||||
- [Smooth CoffeeScript](http://autotelicum.github.io/Smooth-CoffeeScript/)
|
||||
- [CoffeeScript Ristretto](https://leanpub.com/coffeescript-ristretto/read)
|
55
nl/dynamic-programming.md
Normal file
55
nl/dynamic-programming.md
Normal file
@@ -0,0 +1,55 @@
|
||||
---
|
||||
category: Algorithms & Data Structures
|
||||
name: Dynamic Programming
|
||||
contributors:
|
||||
- ["Akashdeep Goel", "http://github.com/akashdeepgoel"]
|
||||
translators:
|
||||
- ["Jasper Haasdijk", "https://github.com/jhaasdijk"]
|
||||
lang: nl-nl
|
||||
---
|
||||
|
||||
# Dynamisch Programmeren
|
||||
|
||||
## Introductie
|
||||
|
||||
Dynamisch programmeren is een krachtige techniek die, zoals we zullen zien, gebruikt kan worden om een bepaalde klasse van problemen op te lossen. Het idee is eenvoudig. Als je een oplossing hebt voor een probleem met een bepaalde input, sla dit resultaat dan op. Hiermee kan je voorkomen dat je in de toekomst nog een keer hetzelfde probleem moet gaan oplossen omdat je het resultaat vergeten bent.
|
||||
|
||||
Onthoud altijd!
|
||||
"Zij die het verleden niet kunnen herinneren, zijn gedoemd het te herhalen."
|
||||
|
||||
## Verschillende aanpakken
|
||||
|
||||
1. *Top-Down* : Oftewel, van boven naar beneden. Begin je oplossing met het afbreken van het probleem in kleine stukken. Kom je een stukje tegen dat je eerder al hebt opgelost, kijk dan enkel naar het opgeslagen antwoord. Kom je een stukje tegen dat je nog niet eerder hebt opgelost, los het op en sla het antwoord op. Deze manier is voor veel mensen de makkelijke manier om erover na te denken, erg intuitief. Deze methode wordt ook wel Memoization genoemd.
|
||||
|
||||
2. *Bottom-Up* : Oftewel, van beneden naar boven. Analyseer het probleem en bekijk de volgorde waarin de sub-problemen opgelost kunnen worden. Begin met het oplossen van de triviale gevallen en maak zodoende de weg naar het gegeven probleem. In dit process is het gegarandeerd dat de sub-problemen eerder worden opgelost dan het gegeven probleem. Deze methode wordt ook wel Dynamisch Programmeren genoemd.
|
||||
|
||||
## Voorbeeld van Dynamisch Programmeren
|
||||
|
||||
Het langst stijgende sequentie probleem is het probleem waarbij je binnen een bepaalde reeks op zoek bent naar het langste aaneengesloten stijgende stuk. Gegeven een reeks `S = {a1 , a2 , a3, a4, ............., an-1, an }` zijn we op zoek naar het langst aaneengesloten stuk zodanig dat voor alle `j` en `i`, `j<i` in de reeks `aj<ai`.
|
||||
|
||||
Ten eerste moeten we de waarde van de langste subreeksen(LSi) op elke index i vinden waar het laatste element van de reeks ai is. Daarna zal LSi het langste subreeks in de gegeven reeks zijn. Om te beginnen heeft LSi de waarde 1 omdat ai een element van de reeks(laatste element) is. Daarna zal voor alle `j` zodanig dat `j<i` en `aj<ai` de grootste LSj gevonden en toegevoegd worden aan LSi. Het algoritme duurt *O(n2)* tijd.
|
||||
|
||||
Pseudo-code voor het vinden van de lengte van de langst stijgende subreeks:
|
||||
De complexiteit van het algoritme kan worden vermindert door het gebruik van een betere data structuur dan een simpele lijst. Het opslaan van een voorgangers lijst en een variabele als `langste_reeks_dusver` en de index daarvan, kan ook een hoop tijd schelen.
|
||||
|
||||
Een soortgelijk concept kan worden toegepast in het vinden van het langste pad in een gerichte acyclische graaf.
|
||||
|
||||
```python
|
||||
for i=0 to n-1
|
||||
LS[i]=1
|
||||
for j=0 to i-1
|
||||
if (a[i] > a[j] and LS[i]<LS[j])
|
||||
LS[i] = LS[j]+1
|
||||
for i=0 to n-1
|
||||
if (langste < LS[i])
|
||||
```
|
||||
|
||||
### Enkele beroemde DP problemen
|
||||
|
||||
- [Floyd Warshall Algorithm - Tutorial and C Program source code](http://www.thelearningpoint.net/computer-science/algorithms-all-to-all-shortest-paths-in-graphs---floyd-warshall-algorithm-with-c-program-source-code)
|
||||
- [Integer Knapsack Problem - Tutorial and C Program source code](http://www.thelearningpoint.net/computer-science/algorithms-dynamic-programming---the-integer-knapsack-problem)
|
||||
- [Longest Common Subsequence - Tutorial and C Program source code](http://www.thelearningpoint.net/computer-science/algorithms-dynamic-programming---longest-common-subsequence)
|
||||
|
||||
## Online Bronnen
|
||||
|
||||
* [codechef](https://www.codechef.com/wiki/tutorial-dynamic-programming)
|
98
nl/html.md
Normal file
98
nl/html.md
Normal file
@@ -0,0 +1,98 @@
|
||||
---
|
||||
language: HTML
|
||||
filename: learnhtml-nl.txt
|
||||
contributors:
|
||||
- ["Christophe THOMAS", "https://github.com/WinChris"]
|
||||
translators:
|
||||
- ["Robert Steed", "https://github.com/robochat"]
|
||||
- ["Jeroen Deviaene", "https://github.com/jerodev"]
|
||||
lang: nl-nl
|
||||
---
|
||||
|
||||
HTML staat voor HyperText Markup Language.
|
||||
Het is een taal die je toe staat pagina's te maken op het World Wide Web.
|
||||
Het is een opmaak taal, dit staat de gebruiker toe om webpagina's te maken in code en zo aan te duiden hoe de pagina moet weergegeven worden.
|
||||
Eigenlijk zijn html files zelfs simpele tekst bestanden.
|
||||
Wat is deze opmaak? Het is een manier om de structuur en data op de pagina weer te geven met speciale html tags.
|
||||
Deze tags dienen om de betekenis te geven aan de tekst die het bevat.
|
||||
Zoals vele computer talen heeft html vele verschillende versies. Hier zullen we HTML5 bespreken.
|
||||
|
||||
**Merk op:** Je kan de verschillende tags en elementen testen terwijl je door de tutorial gaat met een website zoals [codepen](http://codepen.io/pen/), zo kan je de effecten hier van live zien.
|
||||
Dit artikel gaat vooral over de HTML syntax en enkele handige tips
|
||||
|
||||
|
||||
```html
|
||||
<!-- Commentaren worden toegevoegd zoals deze lijn -->
|
||||
|
||||
<!-- #################### De Tags #################### -->
|
||||
|
||||
<!-- Hier is een voorbeeld HTML bestand dat we zullen analyseren. -->
|
||||
|
||||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<title>Mijn Website</title>
|
||||
</head>
|
||||
<body>
|
||||
<h1>Hello, world!</h1>
|
||||
<a href="http://codepen.io/anon/pen/xwjLbZ">Neem een kijkje op deze link</a>
|
||||
<p>Dit is een paragraaf.</p>
|
||||
<p>Dit is nog een paragraaf.</p>
|
||||
<ul>
|
||||
<li>Dit is een item in een niet genummerde lijst</li>
|
||||
<li>Dit is nog zo een item</li>
|
||||
<li>En dit is het laatste item van de lijst</li>
|
||||
</ul>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
<!-- Een HTML bestand start altijd met een tag die aan de browser laat weten dat we HTML gebruiken -->
|
||||
<!doctype html>
|
||||
|
||||
<!-- Daarna openen we de root van het bestand met de <html> tag -->
|
||||
<html>
|
||||
|
||||
<!-- Deze tag moet ook gesloten worden op het einde van het bestand -->
|
||||
</html>
|
||||
|
||||
<!-- Niets mag nog na deze tag komen! -->
|
||||
|
||||
<!-- Binnenin (tussen de html tags <html></html>) vinden we: -->
|
||||
|
||||
<!-- Een header, gedefigneerd door <head> (Deze moet gesloten worden met </head>) -->
|
||||
<!-- De header bevat beschrijvingen en externe data die niet zichtbaar is op de website; Dit is metadata -->
|
||||
|
||||
<head>
|
||||
<title>Mijn Website</title><!-- De <title> tag geeft de tekst aan die in de titelbar van de browser moet weergegeven worden. -->
|
||||
</head>
|
||||
|
||||
<!-- Achter de <head> sectie vinden we bijna altijd <body> -->
|
||||
<!-- Tot op dit punt is nog niets verschenen in het browser venster. -->
|
||||
<!-- In de body plaatsen we wat zichtbaar moet zijn in de browser -->
|
||||
|
||||
<body>
|
||||
<h1>Hello, world!</h1> <!-- De h1 tag maakt een titel. -->
|
||||
<!-- Er zijn ook sub titels voor <h1> van belangrijk <h2> tot minder belangrijk <h6>. -->
|
||||
<a href="http://codepen.io/anon/pen/xwjLbZ">Neem een kijkje op deze link</a> <!-- een hyperlink naar de aangegeven link waar op geklikt kan worden in de browser -->
|
||||
<p>This is a paragraph.</p> <!-- De tag <p> laat ons tekst toevoegen. -->
|
||||
<p>This is another paragraph.</p>
|
||||
<ul> <!-- De tag <ul> maakt een lijst met puntjes. -->
|
||||
<!-- Om een genummerde lijst te hebben gebruik je <ol>, hiermee worden de elementen <li> automatisch genummerd -->
|
||||
<li>This is an item in a non-enumerated list (bullet list)</li>
|
||||
<li>This is another item</li>
|
||||
<li>And this is the last item on the list</li>
|
||||
</ul>
|
||||
</body>
|
||||
|
||||
<!-- En dat is het! Zo gemakkelijk is het om een html bestand te maken. -->
|
||||
```
|
||||
|
||||
## Gebruik
|
||||
|
||||
HTML wordt altijd opgeslagen in bestanden die eindigen in `.html`.
|
||||
|
||||
## Meer weten
|
||||
|
||||
* [wikipedia](https://nl.wikipedia.org/wiki/HTML)
|
||||
* [HTML tutorial](https://developer.mozilla.org/en-US/docs/Web/HTML)
|
||||
* [W3School](http://www.w3schools.com/html/html_intro.asp)
|
72
nl/json.md
Normal file
72
nl/json.md
Normal file
@@ -0,0 +1,72 @@
|
||||
---
|
||||
language: JSON
|
||||
filename: learnjson-nl.json
|
||||
contributors:
|
||||
- ["Anna Harren", "https://github.com/iirelu"]
|
||||
- ["Marco Scannadinari", "https://github.com/marcoms"]
|
||||
- ["himanshu", "https://github.com/himanshu81494"]
|
||||
- ["Maarten Jacobs", "https://github.com/maartenJacobs"]
|
||||
translators:
|
||||
- ["Niels van Velzen", "https://nielsvanvelzen.me"]
|
||||
lang: nl-nl
|
||||
---
|
||||
|
||||
Gezien JSON een zeer eenvouding formaat heeft zal dit één van de simpelste
|
||||
Learn X in Y Minutes ooit zijn.
|
||||
|
||||
JSON heeft volgens de specificaties geen commentaar. Ondanks dat hebben de
|
||||
meeste parsers support voor C-stijl (`//`, `/* */`) commentaar.
|
||||
Sommige parsers staan zelfs trailing komma's toe.
|
||||
(Een komma na het laatste element in een array of achter de laatste eigenschap van een object).
|
||||
Het is wel beter om dit soort dingen te vermijden omdat het niet in elke parser zal werken.
|
||||
|
||||
In het voorbeeld zal alleen 100% geldige JSON gebruikt worden.
|
||||
|
||||
Data types gesupport door JSON zijn: nummers, strings, booleans, arrays, objecten en null.
|
||||
Gesupporte browsers zijn: Firefox(Mozilla) 3.5, Internet Explorer 8, Chrome, Opera 10, Safari 4.
|
||||
De extensie voor JSON bestanden is ".json". De MIME type is "application/json".
|
||||
Enkele nadelen van JSON zijn het gebrek aan type definities en een manier van DTD.
|
||||
|
||||
```json
|
||||
{
|
||||
"sleutel": "waarde",
|
||||
|
||||
"sleutels": "zijn altijd in quotes geplaatst",
|
||||
"nummers": 0,
|
||||
"strings": "Hallø, wereld. Alle unicode karakters zijn toegestaan, samen met \"escaping\".",
|
||||
"boolean": true,
|
||||
"niks": null,
|
||||
|
||||
"groot nummer": 1.2e+100,
|
||||
|
||||
"objecten": {
|
||||
"commentaar": "In JSON gebruik je vooral objecten voor je strutuur",
|
||||
|
||||
"array": [0, 1, 2, 3, "Arrays kunnen alles in zich hebben.", 5],
|
||||
|
||||
"nog een object": {
|
||||
"commentaar": "Objecten kunnen genest worden, erg handig."
|
||||
}
|
||||
},
|
||||
|
||||
"dwaasheid": [
|
||||
{
|
||||
"bronnen van kalium": ["bananen"]
|
||||
},
|
||||
[
|
||||
[1, 0, 0, 0],
|
||||
[0, 1, 0, 0],
|
||||
[0, 0, 1, "neo"],
|
||||
[0, 0, 0, 1]
|
||||
]
|
||||
],
|
||||
|
||||
"alternatieve stijl": {
|
||||
"commentaar": "Kijk dit!"
|
||||
, "De komma positie": "maakt niet uit zolang het er maar is"
|
||||
, "nog meer commentaar": "wat leuk"
|
||||
},
|
||||
|
||||
"dat was kort": "En nu ben je klaar, dit was alles wat je moet weten over JSON."
|
||||
}
|
||||
```
|
242
nl/markdown.md
Normal file
242
nl/markdown.md
Normal file
@@ -0,0 +1,242 @@
|
||||
---
|
||||
language: Markdown
|
||||
filename: markdown-nl.md
|
||||
contributors:
|
||||
- ["Dan Turkel", "http://danturkel.com/"]
|
||||
translators:
|
||||
- ["Jeroen Deviaene", "https://www.github.com/jerodev"]
|
||||
lang: nl-nl
|
||||
---
|
||||
|
||||
Markdown is gecreëerd door John Gruber in 2004. Het is bedoeld om met een gemakkelijke te lezen en
|
||||
schrijven syntax te zijn die gemakkelijk omgevormd kan worden naar HTML (en op heden verschillende
|
||||
andere formaten)
|
||||
|
||||
```md
|
||||
<!-- Markdown erft over van HTML, dus ieder HTML bestand is een geldig Markdown
|
||||
bestand. Dit betekend ook dat html elementen gebruikt kunnen worden in Markdown
|
||||
zoals het commentaar element. Echter, als je een html element maakt in een Markdown
|
||||
document kan je geen markdown gebruiken voor de waarde van dat element. -->
|
||||
|
||||
<!-- Markdown varieert ook van implementatie tot implementatie en per parser. Deze
|
||||
tutorial zal de universele functies van Markdown -->
|
||||
|
||||
<!-- Headers -->
|
||||
<!-- Je kan de HTML elementen <h1> tot <h6> gemakkelijk maken door voor de titel
|
||||
een aantal hashes (#) te plaatsen gelijk aan het level van de header.
|
||||
# Dit is een <h1>
|
||||
## Dit is een <h2>
|
||||
### Dit is een <h3>
|
||||
#### Dit is een <h4>
|
||||
##### Dit is een <h5>
|
||||
###### Dit is een <h6>
|
||||
|
||||
<!-- Markdown heeft ook een alternatieve manier om h1 en h2 te maken -->
|
||||
Dit is een h1
|
||||
=============
|
||||
|
||||
Dit is een h2
|
||||
-------------
|
||||
|
||||
<!-- Simpele tekst stijlen -->
|
||||
<!-- Tekst kan heel gemakelijk gestyled worden cursief of bold met markdown -->
|
||||
|
||||
*Deze tekst is cursief*
|
||||
_Deze tekst ook_
|
||||
|
||||
**Deze tekst is vet gedrukt**
|
||||
__En deze tekst ook!__
|
||||
|
||||
***Deze tekst is zowel bold als schuin gedrukt***
|
||||
**_Deze ook!_**
|
||||
*__En zelfs deze!__*
|
||||
|
||||
<!-- In de GitHub versie van markdown, die gebruikt wordt om markdown te renderen
|
||||
op GitHub, is er ook doorstrepen -->
|
||||
|
||||
~~Deze tekst wordt doorstreept.~~
|
||||
|
||||
<!-- Paragrafen worden onderscheiden door een of meerdere lege lijnen -->
|
||||
|
||||
Dit is een paragraaf.
|
||||
|
||||
Dit is paragraaf 2.
|
||||
Dit is nog steeds paragraaf 2!
|
||||
|
||||
|
||||
Hallo, ik ben paragraaf 3.
|
||||
|
||||
<!-- Citaten zijn gemakkelijk te maken met het '>' karakter. -->
|
||||
|
||||
> Dit is een citaat. Je kan alle lijnen manueel starten met een '>'.
|
||||
> Of je kan de lijn heel heel, heel, lang laten worden zodat de parser deze automatisch zal afbreken en op een nieuwe lijn plaatsen.
|
||||
> Het maakt niet uit, zolang je start met een '>'.
|
||||
|
||||
> Je kan ook in niveaus werken
|
||||
>> Niveau 2
|
||||
> Hoe leuk is dat?
|
||||
|
||||
<!-- Lijsten -->
|
||||
<!-- Niet geordende lijsten kunnen gemaakt worden met sterretjes, plussen of streepjes -->
|
||||
|
||||
* Item
|
||||
* Item
|
||||
* Nog een item
|
||||
|
||||
of
|
||||
|
||||
+ Item
|
||||
+ Item
|
||||
+ Nog een item
|
||||
|
||||
of
|
||||
|
||||
- Item
|
||||
- Item
|
||||
- Een laatste item
|
||||
|
||||
<!-- Geordende lijsten kunnen gemaakt wroden met cijfers -->
|
||||
|
||||
1. Item een
|
||||
2. Item twee
|
||||
3. Item drie
|
||||
|
||||
<!-- Het getal moet zelfs niet overeen komen met het item in de lijst, markdown zal
|
||||
automatisch de nummers aanpassen -->
|
||||
|
||||
1. Item een
|
||||
1. Item twe
|
||||
1. Item drie
|
||||
<!-- (De output is gelijk aan de vorige lijst) -->
|
||||
|
||||
<!-- Je kan ook gebruik maken van sub lijsten -->
|
||||
|
||||
1. Item een
|
||||
2. Item twee
|
||||
3. Item drie
|
||||
* Sub-item
|
||||
* Sub-item
|
||||
4. Item vier
|
||||
|
||||
<!-- Er zijn zelfs todo lijsten. Dit genereert HTML checkboxen. -->
|
||||
|
||||
Boxen zonder een 'x' zijn niet aangevinkt
|
||||
- [ ] Eerste to-do item.
|
||||
- [ ] Tweede to-do item
|
||||
Dit item zal aangevinkt zijn in de gerenderde html.
|
||||
- [x] Deze taak is uitgevoerd
|
||||
|
||||
<!-- Code blokken -->
|
||||
<!-- Een code block kan aangeduid worden door vier spaties of een tab -->
|
||||
|
||||
Dit is code
|
||||
En dit ook
|
||||
|
||||
<!-- Extra tabs kunnen gebruikt worden om tabs in de code aan te geven -->
|
||||
|
||||
my_array.each do |item|
|
||||
puts item
|
||||
end
|
||||
|
||||
<!-- Inline code kan aangeduid worden met ` -->
|
||||
|
||||
John wist zelfs niet dat de `go_to()` functie bestond!
|
||||
|
||||
<!-- In GitHub Markdown kan je een speciale syntax gebruiken die aangeeft welke
|
||||
taal gebruikt wordt in het code blok. -->
|
||||
|
||||
\`\`\`ruby <!-- Wis de backslashes om dit te doen, juist ```ruby ! -->
|
||||
def foobar
|
||||
puts "Hello world!"
|
||||
end
|
||||
\`\`\` <!-- Hier ook, geen backslashes, juist ``` -->
|
||||
|
||||
<!-- Voor bovenstaande tekst moet geen tab gebruikt worden. Plus, GitHub zal syntax
|
||||
highlighting gebruiken voor deze specifieke taal. Hier, Ruby.
|
||||
|
||||
<!-- Horizontale lijn (<hr />) -->
|
||||
<!-- Horizontale lijnen kunnen gemakkelijk toegevoegd worden door drie of meer
|
||||
sterretjes, of streepjes te plaatsen -->
|
||||
|
||||
***
|
||||
---
|
||||
- - -
|
||||
****************
|
||||
|
||||
<!-- Links -->
|
||||
<!-- Een van de beste dingen in Markdown is hoe simpel het is om links te maken.
|
||||
plaats de tekst om weer te geven tussen [ en ] gevolgd door de link tussen ( en ) -->
|
||||
|
||||
[Klik mij!](http://test.com/)
|
||||
|
||||
<!-- Een titel kan ook toegevoegd worden aan de link met aanhalingstekens -->
|
||||
|
||||
[Klik mij!](http://test.com/ "Titel voor de link")
|
||||
|
||||
<!-- Relative paden werken ook -->
|
||||
|
||||
[Naar de muziek](/music/).
|
||||
|
||||
<!-- Links kunnen ook gelegd worden met referenties -->
|
||||
|
||||
[Klik deze link][link1] voor meer info!
|
||||
[Beijk ook dit][foobar] als je echt wil.
|
||||
|
||||
[link1]: http://test.com/ "Cool!"
|
||||
[foobar]: http://foobar.biz/ "Tof!"
|
||||
|
||||
|
||||
<!-- Afbeeldingen -->
|
||||
<!-- Afbeeldingen worden toegevoegd op exact de zelfde manier als links maar met een
|
||||
uitroepteken aan het begin van de lijn. -->
|
||||
|
||||

|
||||
|
||||
<!-- Referenties werkt ook zals bij links -->
|
||||
|
||||
![Dit is de alt waarde][myimage]
|
||||
|
||||
[myimage]: relative/urls/cool/image.jpg "als een titel nodig is, staat deze hier"
|
||||
|
||||
<!-- Varia -->
|
||||
<!-- Auto-links -->
|
||||
|
||||
<http://testwebsite.com/> is gelijk aan
|
||||
[http://testwebsite.com/](http://testwebsite.com/)
|
||||
|
||||
<!-- Auto-links for emails -->
|
||||
|
||||
<foo@bar.com>
|
||||
|
||||
<!-- Karakters escapen -->
|
||||
|
||||
Als je sterretjes wil gebruiken in je tekst zoals *dit* dan zal dit schuingedrukt weergegeven
|
||||
worden.
|
||||
Dit kan je oplossen met backslashes: \*dit\* staat tussen sterretjes
|
||||
|
||||
<!-- Toetsenbord toetsen -->
|
||||
<!-- In GitHub Markdown, kan je <kbd> gebruiken om toetsenbord toetsen weer te geven -->
|
||||
|
||||
Loopt je computer vast? Probeer volgende toetsen combinatie:
|
||||
<kbd>Ctrl</kbd>+<kbd>Alt</kbd>+<kbd>Del</kbd>
|
||||
|
||||
<!-- Tabellen -->
|
||||
<!-- Tabellen zijn momenteel enkel beschikbaar in GitHub Markdown en zijn redelijk omslachtig.
|
||||
Maar als je er echt wilt toevoegen: -->
|
||||
|
||||
| Col1 | Col2 | Col3 |
|
||||
| :--------------- | :---------: | ----------------: |
|
||||
| Links uitgelijnt | Gecentreerd | Rechts uitgelijnt |
|
||||
| blah | blah | blah |
|
||||
|
||||
<!-- of, Voor het zelfde resultaat -->
|
||||
|
||||
Col 1 | Col2 | Col3
|
||||
:-- | :-: | --:
|
||||
Zeer | Lelijke | Code!
|
||||
|
||||
<!-- The end! -->
|
||||
|
||||
```
|
||||
|
||||
Voor meer info, bekijk de officiële post van John Gruber [hier](http://daringfireball.net/projects/markdown/syntax) en de handige cheatsheet van Adam Pritchard [hier](https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet).
|
171
nl/typescript.md
Normal file
171
nl/typescript.md
Normal file
@@ -0,0 +1,171 @@
|
||||
---
|
||||
language: TypeScript
|
||||
contributors:
|
||||
- ["Philippe Vlérick", "https://github.com/pvlerick"]
|
||||
filename: learntypescript-nl.ts
|
||||
translators:
|
||||
- ["Niels van Velzen", "https://nielsvanvelzen.me"]
|
||||
lang: nl-nl
|
||||
---
|
||||
|
||||
TypeScript is een taal gericht op het versoepelen van de ontwikkeling van
|
||||
grote applicaties gemaakt in JavaScript.
|
||||
TypeScript voegt veelgebruikte technieken zoals klassen, modules, interfaces,
|
||||
generieken en statische typen toe aan JavaScript.
|
||||
TypeScript is een superset van JavaScript: alle JavaScript code is geldige
|
||||
TypeScript code waardoor de overgang van JavaScript naar TypeScript wordt versoepeld.
|
||||
|
||||
Dit artikel focust zich alleen op de extra's van TypeScript tegenover [JavaScript](../javascript-nl/).
|
||||
|
||||
Om de compiler van TypeScript te kunnen proberen kun je naar de [Playground](https://www.typescriptlang.org/Playground) gaan.
|
||||
Hier kun je automatisch aangevulde code typen in TypeScript en de JavaScript variant bekijken.
|
||||
|
||||
```ts
|
||||
// Er zijn 3 basis typen in TypeScript
|
||||
var isKlaar: boolean = false;
|
||||
var lijnen: number = 42;
|
||||
var naam: string = "Peter";
|
||||
|
||||
// Wanneer het type onbekend is gebruik je "Any"
|
||||
var nietZeker: any = 4;
|
||||
nietZeker = "misschien een string";
|
||||
nietZeker = false; // Toch een boolean
|
||||
|
||||
// Voor collecties zijn er "typed arrays"
|
||||
var lijst: number[] = [1, 2, 3];
|
||||
// of generieke arrays
|
||||
var lijst: Array<number> = [1, 2, 3];
|
||||
|
||||
// Voor enumeraties:
|
||||
enum Kleur {Rood, Groen, Blauw};
|
||||
var c: Kleur = Kleur.Groen;
|
||||
|
||||
// Als laatst, "void" wordt gebruikt voor als een functie geen resultaat geeft
|
||||
function groteVerschrikkelijkeMelding(): void {
|
||||
alert("Ik ben een vervelende melding!");
|
||||
}
|
||||
|
||||
// Functies zijn eersteklas ?, supporten de lambda "fat arrow" syntax en
|
||||
// gebruiken gebruiken "type inference"
|
||||
|
||||
// Het volgende is allemaal hetzelfde
|
||||
var f1 = function(i: number): number { return i * i; }
|
||||
var f2 = function(i: number) { return i * i; }
|
||||
var f3 = (i: number): number => { return i * i; }
|
||||
var f4 = (i: number) => { return i * i; }
|
||||
// Omdat we maar 1 lijn gebruiken hoeft het return keyword niet gebruikt te worden
|
||||
var f5 = (i: number) => i * i;
|
||||
|
||||
// Interfaces zijn structureel, elk object wat de eigenschappen heeft
|
||||
// is een gebruiker van de interface
|
||||
interface Persoon {
|
||||
naam: string;
|
||||
// Optionele eigenschappen worden gemarkeerd met "?"
|
||||
leeftijd?: number;
|
||||
// En natuurlijk functies
|
||||
verplaats(): void;
|
||||
}
|
||||
|
||||
// Object die gebruikt maakt van de "Persoon" interface
|
||||
// Kan gezien worden als persoon sinds het de naam en verplaats eigenschappen bevat
|
||||
var p: Persoon = { naam: "Bobby", verplaats: () => {} };
|
||||
// Object met de optionele leeftijd eigenschap
|
||||
var geldigPersoon: Persoon = { naam: "Bobby", leeftijd: 42, verplaats: () => {} };
|
||||
// Ongeldig persoon vanwege de leeftijds type
|
||||
var ongeldigPersoon: Persoon = { naam: "Bobby", leeftijd: true };
|
||||
|
||||
// Interfaces kunnen ook een functie ype beschrijven
|
||||
interface ZoekFunc {
|
||||
(bron: string, subString: string): boolean;
|
||||
}
|
||||
// Alleen de parameters types zijn belangrijk, namen maken niet uit.
|
||||
var mySearch: ZoekFunc;
|
||||
mySearch = function(src: string, sub: string) {
|
||||
return src.search(sub) != -1;
|
||||
}
|
||||
|
||||
// Classes - leden zijn standaard publiek
|
||||
class Punt {
|
||||
// Eigenschappen
|
||||
x: number;
|
||||
|
||||
// Constructor - de publieke / prive trefwoorden in deze context zullen
|
||||
// eigenschappen in de klasse kunnen aanmaken zonder ze te defineren.
|
||||
// In dit voorbeeld zal "y" net als "x" gedefineerd worden met minder code.
|
||||
// Standaard waardes zijn ook gesupport
|
||||
|
||||
constructor(x: number, public y: number = 0) {
|
||||
this.x = x;
|
||||
}
|
||||
|
||||
// Functies
|
||||
dist(): number { return Math.sqrt(this.x * this.x + this.y * this.y); }
|
||||
|
||||
// Statische leden
|
||||
static origin = new Punt(0, 0);
|
||||
}
|
||||
|
||||
var p1 = new Punt(10 ,20);
|
||||
var p2 = new Punt(25); // y zal de waarde 0 krijgen
|
||||
|
||||
// Overnemen
|
||||
class Punt3D extends Punt {
|
||||
constructor(x: number, y: number, public z: number = 0) {
|
||||
super(x, y); // Constructor van ouder aanroepen (Punt)
|
||||
}
|
||||
|
||||
// Overschrijven
|
||||
dist(): number {
|
||||
var d = super.dist();
|
||||
return Math.sqrt(d * d + this.z * this.z);
|
||||
}
|
||||
}
|
||||
|
||||
// Modules werken ongeveer hetzelfde als namespaces
|
||||
// met "." kan je submodules defineren
|
||||
module Geometrie {
|
||||
export class Vierkant {
|
||||
constructor(public zijLengte: number = 0) {
|
||||
}
|
||||
|
||||
oppervlakte() {
|
||||
return Math.pow(this.zijLengte, 2);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var s1 = new Geometrie.Vierkant(5);
|
||||
|
||||
// Local alias for referencing a module
|
||||
import G = Geometrie;
|
||||
|
||||
var s2 = new G.Vierkant(10);
|
||||
|
||||
// Generieken
|
||||
// Classes
|
||||
class Tupel<T1, T2> {
|
||||
constructor(public item1: T1, public item2: T2) {
|
||||
}
|
||||
}
|
||||
|
||||
// Interfaces
|
||||
interface Paar<T> {
|
||||
item1: T;
|
||||
item2: T;
|
||||
}
|
||||
|
||||
// En functies
|
||||
var paarNaarTupel = function<T>(p: Paar<T>) {
|
||||
return new Tupel(p.item1, p.item2);
|
||||
};
|
||||
|
||||
var tupel = paarNaarTupel({ item1: "hallo", item2: "wereld" });
|
||||
|
||||
// Refferentie naar een definitie bestand:
|
||||
/// <reference path="jquery.d.ts" />
|
||||
```
|
||||
|
||||
## Verder lezen (engels)
|
||||
|
||||
* [TypeScript Official website](https://www.typescriptlang.org/)
|
||||
* [Source Code on GitHub](https://github.com/microsoft/TypeScript)
|
272
nl/vim.md
Normal file
272
nl/vim.md
Normal file
@@ -0,0 +1,272 @@
|
||||
---
|
||||
category: tool
|
||||
tool: Vim
|
||||
contributors:
|
||||
- ["RadhikaG", "https://github.com/RadhikaG"]
|
||||
translators:
|
||||
- ["Rick Haan", "https://github.com/RickHaan"]
|
||||
filename: learnvim-nl.yaml
|
||||
lang: nl-nl
|
||||
---
|
||||
|
||||
# Vim in het Nederlands
|
||||
|
||||
[Vim](http://www.vim.org)
|
||||
(Vi IMproved) is een kopie van de populaire vi editor voor Unix. Het is
|
||||
ontworpen voor snelheid, verhoogde productiviteit en is beschikbaar in de meeste
|
||||
unix-gebaseerde systemen. Het heeft verscheidene toetscombinaties voor snelle
|
||||
navigatie en aanpassingen in het doelbestand.
|
||||
|
||||
## De Basis van het navigeren in Vim
|
||||
|
||||
```
|
||||
vim <bestandsnaam> # Open <bestandsnaam> in vim
|
||||
:help <onderwerp> # Open ingebouwde documentatie over <onderwerp> als
|
||||
deze bestaat
|
||||
:q # Vim afsluiten
|
||||
:w # Huidig bestand opslaan
|
||||
:wq # Huidig bestand opslaan en vim afsluiten
|
||||
ZZ # Huidig bestand opslaan en vim afsluiten
|
||||
:x # Huidig bestand opslaan en vim afsluiten, verkorte versie
|
||||
:q! # Afsluiten zonder opslaan
|
||||
# ! *forceert* het normale afsluiten met :q
|
||||
|
||||
u # Ongedaan maken
|
||||
CTRL+R # Opnieuw doen
|
||||
|
||||
h # Ga 1 karakter naar links
|
||||
j # Ga 1 regel naar beneden
|
||||
k # Ga 1 regel omhoog
|
||||
l # Ga 1 karakter naar rechts
|
||||
|
||||
Ctrl+B # Ga 1 volledig scherm terug
|
||||
Ctrl+F # Ga 1 volledig scherm vooruit
|
||||
Ctrl+D # Ga 1/2 scherm vooruit
|
||||
Ctrl+U # Ga 1/2 scherm terug
|
||||
|
||||
# Verplaatsen over de regel
|
||||
|
||||
0 # Verplaats naar het begin van de regel
|
||||
$ # Verplaats naar het eind van de regel
|
||||
^ # Verplaats naar het eerste niet-lege karakter op de regel
|
||||
|
||||
# Zoeken in de tekst
|
||||
|
||||
/word # Markeert alle voorvallen van 'word' na de cursor
|
||||
?word # Markeert alle voorvallen van 'word' voor de cursor
|
||||
n # Verplaatst de cursor naar het volgende voorval van
|
||||
de zoekopdracht
|
||||
N # Verplaatst de cursor naar het vorige voorval van
|
||||
de zoekopdracht
|
||||
|
||||
:%s/foo/bar/g # Verander 'foo' naar 'bar' op elke regel van het bestand
|
||||
:s/foo/bar/g # Verander 'foo' naar 'bar' op de huidge regel in
|
||||
het bestand
|
||||
:%s/\n/\r/g # Vervang nieuwe regel karakters met nieuwe regel karakters
|
||||
|
||||
# Spring naar karakters
|
||||
|
||||
f<character> # Spring vooruit en land op <character>
|
||||
t<character> # Spring vooruit en land net voor <character>
|
||||
|
||||
# Bijvoorbeeld,
|
||||
f< # Spring vooruit en land op <
|
||||
t< # Spring vooruit en land net voor <
|
||||
|
||||
# Verplaatsen per woord
|
||||
|
||||
w # Ga 1 woord vooruit
|
||||
b # Ga 1 woord achteruit
|
||||
e # Ga naar het einde van het huidige woord
|
||||
|
||||
# Andere karakters om mee te verplaatsen
|
||||
|
||||
gg # Ga naar de bovenkant van het bestand
|
||||
G # Ga naar de onderkant van het bestand
|
||||
:NUM # Ga naar regel NUM (NUM is elk nummer)
|
||||
H # Ga naar de bovenkant van het scherm
|
||||
M # Ga naar het midden van het scherm
|
||||
L # Ga naar de onderkant van het scherm
|
||||
```
|
||||
|
||||
## Help documentatie
|
||||
|
||||
Vim heeft ingebouwde help documentatie dat benaderd kan worden met
|
||||
`:help <onderwerp>`. Bijvoorbeeld `:help navigation` geeft documentatie weer hoe
|
||||
door vim te navigeren. `:help` kan ook gebruikt worden zonder onderwerp. Dan wordt de standaard documentatie weergeven die bedoelt is om vim toegankelijker te maken.
|
||||
|
||||
## Modus
|
||||
|
||||
Vim is gebaseerd op het concept van **modus**.
|
||||
|
||||
* Command (opdracht) modus - Vim wordt opgestart in deze mode. Deze mode wordt
|
||||
gebruikt om opdrachten te geven en te navigeren
|
||||
* Insert (invoer) modus - Wordt gebruikt voor het aanpassen van het bestand
|
||||
* Zichtbare (Visual) modus - Wordt gebruikt voor het markeren en bewerken van
|
||||
tekst
|
||||
* Ex modus - Wordt gebruikt voor het uitvoeren van opdrachten met `:`
|
||||
|
||||
```
|
||||
i # Zet vim in de Command modus voor de cursor positie
|
||||
a # Zet vim in de Insert modus na de cursor positie (append)
|
||||
v # Zet vim in de Visual modus
|
||||
: # Zet vim in de ex modus
|
||||
<esc> # 'Escapes' vanuit elke modus naar de Command modus
|
||||
|
||||
# Het kopiëren en plakken van tekst
|
||||
|
||||
y # Yank (kopieer) wat geselecteerd is
|
||||
yy # Yank (kopieer) de huidige regel
|
||||
d # Verwijder wat geselecteerd is
|
||||
dd # Verwijder de huidige regel
|
||||
p # Plak de huidige tekst op de cursor positie
|
||||
P # Plak de huidige tekst voor de cursor positie
|
||||
x # Verwijder karakter op cursor positie
|
||||
```
|
||||
|
||||
## De 'gramatica' van vim
|
||||
|
||||
Vim kan aangeleerd worden als een set van acties in het 'Verb-Modifier-Noun'
|
||||
formaat waar:
|
||||
|
||||
Verb (werkwoord) - De uit te voeren actie
|
||||
Modifier (bijwoord) - Hoe de actie uitgevoerd dient te worden
|
||||
Noun - Het object waarop de actie uitgevoerd wordt
|
||||
|
||||
Een paar belangrijke voorbeelden van 'Verbs', 'Modifiers', en 'Nouns' zijn:
|
||||
|
||||
```
|
||||
# 'Verbs'
|
||||
|
||||
d # Verwijder
|
||||
c # Verander
|
||||
y # Kopieer
|
||||
v # Zichtbaar selecteren
|
||||
|
||||
# 'Modifiers'
|
||||
|
||||
i # Binnen
|
||||
a # Rondom
|
||||
NUM # Elk nummer
|
||||
f # Zoekt iets en selecteerd het
|
||||
t # Zoekt iets en selecteerd het karakter voor het
|
||||
/ # Vindt een combinatie van tekens vanaf de cursor
|
||||
? # Vindt een combinatie van tekens voor de cursor
|
||||
|
||||
# 'Nouns'
|
||||
|
||||
w # Woord
|
||||
s # Zin
|
||||
p # Paragraaf
|
||||
b # Blok
|
||||
|
||||
# Voorbeeld 'zinnen' of opdrachten
|
||||
|
||||
d2w # Verwijder twee woorden
|
||||
cis # Verander in de zin
|
||||
yip # Kopiereer in de paragraaf
|
||||
ct< # Verander naar haakje openen
|
||||
# Verander de tekst vanaf de huidige positie tot het volgende haakje
|
||||
openen
|
||||
d$ # Verwijder tot het einde van de regel
|
||||
```
|
||||
|
||||
## Een aantal afkortingen en trucs
|
||||
|
||||
```
|
||||
> # Verspring de selectie met 1 blok
|
||||
< # Verspring de selectie met 1 blok terug
|
||||
:earlier 15 # Zet het document terug naar de situatie van 15 minuten
|
||||
geleden
|
||||
:later 15 # Zet het document in de situatie 15 minuten in de toekomst
|
||||
(omgekeerde van de vorige opdracht)
|
||||
ddp # Wissel de positie van opeenvolgende regels. dd daarna p
|
||||
. # Herhaal de vorige opdracht
|
||||
:w !sudo tee% # Sla het huidige bestand op als root
|
||||
:set syntax=c # Stel syntax uitlichten in op 'c'
|
||||
:sort # Sorteer alle regels
|
||||
:sort! # Sorteer alle regels omgekeerd
|
||||
:sort u # Sorteer alle regels en verwijder duplicaten
|
||||
~ # Stel letter case in voor geselecteerde tekst
|
||||
u # Verander de geselecteerde tekst naar kleine letters
|
||||
U # Verander de geselecteerde tekst naar hoofdletters
|
||||
|
||||
# Fold text
|
||||
zf # Creeer een vouw op de geslecteerde tekst
|
||||
zo # Open huidige vouw
|
||||
zc # Sluit huidige vouw
|
||||
zR # Open alle vouwen
|
||||
zM # Sluit alle vouwen
|
||||
```
|
||||
|
||||
## Macro's
|
||||
|
||||
Macro's zijn opgeslagen opdrachten. Wanneer je begint met het opnemen van een
|
||||
macro dan worden **alle** acties opgenomen, totdat je stopt met opnemen. Als de
|
||||
macro uitgevoerd wordt, worden alle acties in de zelfde volgorde als tijdens het
|
||||
opnemen uitgevoerd.
|
||||
|
||||
```
|
||||
qa # Start met het opnemen van de makro genaamd 'a'
|
||||
q # Stop met opnemen
|
||||
@a # Gebruik macro 'a'
|
||||
```
|
||||
|
||||
## Configureren van .vimrc
|
||||
|
||||
Het .vimrc bestand kan gebruikt worden voor het opslaan van een
|
||||
standaardconfiguratie van Vim. Het bestand wordt opgeslagen in de home map van de gebruiker. Hieronder staat een voorbeeld van een .vimrc bestand.
|
||||
|
||||
```vim
|
||||
" Voorbeeld ~/.vimrc
|
||||
" 2015.10
|
||||
|
||||
" In te stellen dat Vim niet samenwerkt met Vi
|
||||
set nocompatible
|
||||
|
||||
" Stel in dat Vim kijkt naar de bestandstype voor syntax uitlichting en
|
||||
automatish inspringen
|
||||
filetype indent plugin on
|
||||
|
||||
" Zet inspringen aan
|
||||
syntax on
|
||||
|
||||
" Betere opdracht regel aanvulling
|
||||
set wildmenu
|
||||
|
||||
" Gebruik niet hoofdlettergevoelig zoeken.
|
||||
set ignorecase
|
||||
set smartcase
|
||||
|
||||
" Gebruik automatisch inspringen
|
||||
set autoindent
|
||||
|
||||
" Geef regelnummers weer
|
||||
set number
|
||||
|
||||
" Het aantal zichtbare spatie's per TAB
|
||||
set tabstop=4
|
||||
|
||||
" Het aantal spatie's tijdens het aanpassen
|
||||
set softtabstop=4
|
||||
|
||||
" Aantal spatie's wanneer (>> en <<) worden gebruikt
|
||||
|
||||
" Maak van TAB's spatie's
|
||||
set expandtab
|
||||
|
||||
" Gebruik slimme tabs spatie's voor inspringen en uitlijnen
|
||||
set smarttab
|
||||
```
|
||||
|
||||
## Referenties (Engels)
|
||||
|
||||
[Vim | Home](http://www.vim.org/index.php)
|
||||
|
||||
`$ vimtutor`
|
||||
|
||||
[A vim Tutorial and Primer](https://danielmiessler.com/study/vim/)
|
||||
|
||||
[What are the dark corners of Vim your mom never told you about? (Stack Overflow thread)](http://stackoverflow.com/questions/726894/what-are-the-dark-corners-of-vim-your-mom-never-told-you-about)
|
||||
|
||||
[Arch Linux Wiki](https://wiki.archlinux.org/index.php/Vim)
|
131
nl/xml.md
Normal file
131
nl/xml.md
Normal file
@@ -0,0 +1,131 @@
|
||||
---
|
||||
language: XML
|
||||
filename: learnxml-nl.xml
|
||||
contributors:
|
||||
- ["João Farias", "https://github.com/JoaoGFarias"]
|
||||
translators:
|
||||
- ["Frank van Gemeren", "https://github.com/frvge"]
|
||||
lang: nl-nl
|
||||
---
|
||||
|
||||
XML is een markuptaal die ontwikkeld is om data in te bewaren en data mee te
|
||||
verzenden.
|
||||
|
||||
Anders dan HTML specificeert XML niet hoe data getoond of geformatteerd moet worden.
|
||||
Het bevat de data slechts.
|
||||
|
||||
* XML Syntax
|
||||
|
||||
```xml
|
||||
<!-- Dit is commentaar in XML -->
|
||||
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<boekenwinkel>
|
||||
<boek categorie="KOKEN">
|
||||
<title taal="nl">Alledaags Italiaans</titel>
|
||||
<auteur>Giada De Laurentiis</auteur>
|
||||
<jaar>2005</jaar>
|
||||
<prijs>30.00</prijs>
|
||||
</boek>
|
||||
<boek categorie="KINDEREN">
|
||||
<titel taal="nl">Harry Potter</titel>
|
||||
<auteur>J K. Rowling</auteur>
|
||||
<jaar>2005</jaar>
|
||||
<prijs>29.99</prijs>
|
||||
</boek>
|
||||
<boek categorie="WEB">
|
||||
<titel taal="en">Learning XML</titel>
|
||||
<auteur>Erik T. Ray</auteur>
|
||||
<jaar>2003</jaar>
|
||||
<prijs>39.95</prijs>
|
||||
</boek>
|
||||
</boekenwinkel>
|
||||
|
||||
<!-- Hierboven staat een standaard XML bestand.
|
||||
Het begint met een declaratie die optionele metadata bevat.
|
||||
|
||||
XML werkt met een boomstructuur. De stamknoop hierboven is 'boekenwinkel'.
|
||||
Deze heeft drie kinderen die allemaal 'boek' zijn. Deze knopen hebben op
|
||||
hun beurt weer kinderen, enzovoort...
|
||||
|
||||
Knopen hebben open- en sluittags. Kinderen zijn knopen die zich tussen de
|
||||
open- en sluittags van hun ouders bevinden. -->
|
||||
|
||||
<!-- XML bevat two soorten data:
|
||||
1 - Attributen -> Dit is metadata van een knoop.
|
||||
Deze informatie wordt meestal door de XML parser gebruikt om de data op
|
||||
de juiste manier op te slaan. Je herkent het door de syntax in de vorm
|
||||
van naam="waarde" in de open tag.
|
||||
2 - Elementen -> Dit is de pure data
|
||||
Deze gegevens worden door de parser uit het XML bestand gehaald.
|
||||
Elementen staan tussen de open- en sluittags. -->
|
||||
|
||||
|
||||
<!-- Hieronder staat een element met twee attributen -->
|
||||
<bestand type="gif" id="4293">computer.gif</bestand>
|
||||
```
|
||||
|
||||
* Grammaticaal correcte documenten x Validatie
|
||||
|
||||
Een XML document is "grammaticaal correct" of "well-formatted" als de
|
||||
syntax correct is. Het is ook mogelijk om meer structuur in het document
|
||||
aan te brengen met document definities zoals DTD en XML Schema.
|
||||
|
||||
Een XML document dat aan een document definitie voldoet wordt "valide" volgens
|
||||
die document definitie genoemd.
|
||||
|
||||
Met deze gereedschappen kan je de XML data buiten je applicatie logica
|
||||
controleren.
|
||||
|
||||
```xml
|
||||
<!-- Hieronder staat een versimpelde versie voor een boekenwinkel document,
|
||||
met een toevoeging van een DTD definitie. -->
|
||||
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE note SYSTEM "boekenwinkel.dtd">
|
||||
<boekenwinkel>
|
||||
<boek categorie="KOKEN">
|
||||
<titel>Alledaags Italiaans</titel>
|
||||
<prijs>30.00</prijs>
|
||||
</boek>
|
||||
</boekenwinkel>
|
||||
|
||||
<!-- De DTD kan er als volgt uitzien:-->
|
||||
|
||||
<!DOCTYPE note
|
||||
[
|
||||
<!ELEMENT boekenwinkel (boek+)>
|
||||
<!ELEMENT boek (titel,prijs)>
|
||||
<!ATTLIST boek categorie CDATA "Literatuur">
|
||||
<!ELEMENT titel (#PCDATA)>
|
||||
<!ELEMENT prijs (#PCDATA)>
|
||||
]>
|
||||
|
||||
|
||||
<!-- De DTD begint met een declaratie.
|
||||
Hierna volgt de declaratie van de stamknoop, die 1 of meer 'boek' kinderen
|
||||
moet bevatten.
|
||||
Elk 'boek' moet precies 1 'titel' en 'prijs' element bevatten en een attribuut
|
||||
'categorie' hebben waarvan 'Literatuur' de standaard waarde is.
|
||||
De 'titel' en 'prijs' knopen bevatten parsed character data.-->
|
||||
|
||||
<!-- De DTD kan ook in het XML bestand zelf gedeclareerd worden.-->
|
||||
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<!DOCTYPE note
|
||||
[
|
||||
<!ELEMENT boekenwinkel (boek+)>
|
||||
<!ELEMENT boek (titel,prijs)>
|
||||
<!ATTLIST boek categorie CDATA "Literatuur">
|
||||
<!ELEMENT titel (#PCDATA)>
|
||||
<!ELEMENT prijs (#PCDATA)>
|
||||
]>
|
||||
|
||||
<boekenwinkel>
|
||||
<boek categorie="KOKEN">
|
||||
<titel>Alledaags Italiaans</titel>
|
||||
<prijs>30.00</prijs>
|
||||
</boek>
|
||||
</boekenwinkel>
|
||||
```
|
140
nl/yaml.md
Normal file
140
nl/yaml.md
Normal file
@@ -0,0 +1,140 @@
|
||||
---
|
||||
language: YAML
|
||||
filename: learnyaml-nl.yaml
|
||||
contributors:
|
||||
- ["Leigh Brenecki", "https://github.com/adambrenecki"]
|
||||
translators:
|
||||
- ["Niels van Velzen", "https://nielsvanvelzen.me"]
|
||||
- ["Sam van Kampen", "http://tehsvk.net"]
|
||||
lang: nl-nl
|
||||
---
|
||||
|
||||
YAML is een dataserialisatietaal ontworpen om snel te kunnen worden begrepen door mensen.
|
||||
|
||||
Het is een strikte superset van JSON en bevat nieuwe regels en een strikte manier van inspringen die lijkt op de manier van Python. In tegenstelling tot Python kan je alleen geen tabtekens gebruiken.
|
||||
|
||||
```yaml
|
||||
# Commentaar in YAML ziet er zo uit
|
||||
|
||||
##################
|
||||
# SCALAIRE TYPES #
|
||||
##################
|
||||
|
||||
# Ons hoofdobject (Wat in het hele document gebruikt wordt) is een map;
|
||||
# dit staat gelijk aan een dictionary, hash of object in andere talen.
|
||||
sleutel: waarde
|
||||
nog_een_sleutel: Een andere waarde
|
||||
nummer_waarde: 100
|
||||
wetenschappelijke_waarde: 1e+12
|
||||
boolean_waarde: true
|
||||
null_waarde: null
|
||||
sleutel met spaties: waarde
|
||||
# Merk op dat strings niet verplicht in quotes moeten, maar dit kan wel.
|
||||
quote_waarde: "Een string in quotes"
|
||||
"Ook sleutels kunnen in quotes": "Dit is bijvoorbeeld handig als je een dubbelepunt wilt gebruiken in je key"
|
||||
|
||||
# Tekst over meerdere lijnen kan je schrijven als een 'letterlijk blok' (met |)
|
||||
# Of een 'gevouwen blok' (met >)
|
||||
letterlijk_blok: |
|
||||
Dit hele blok met tekst is de waarde van de 'letterlijk_blok'-sleutel,
|
||||
met nieuwe lijnen behouden.
|
||||
|
||||
Het blok blijft door gaan tot het geeindigd wordt door korter in te springen.
|
||||
|
||||
Lijnen die groter zijn ingesprongen behouden dit.
|
||||
gevouwen_stijl: >
|
||||
Dit blok met tekst zal de waarde zijn van 'gevouwen_stijl',
|
||||
maar deze keer zullen alle nieuwe lijnen worden vervangen met een spatie.
|
||||
|
||||
Lege lijnen, zoals hierboven, zullen worden vertaald naar een nieuwe lijn.
|
||||
|
||||
Meer ingesprongen lijnen zullen hun nieuwe lijnen ook behouden,
|
||||
deze tekst zal over 2 lijnen te zien zijn.
|
||||
|
||||
##################
|
||||
# COLLECTIETYPES #
|
||||
##################
|
||||
|
||||
# Nesten wordt bereikt met inspringen.
|
||||
geneste_map:
|
||||
sleutel: waarde
|
||||
andere_sleutel: andere waarde
|
||||
andere_geneste_map:
|
||||
hallo: wereld
|
||||
|
||||
# In een map hoeft de sleutel geen string te zijn.
|
||||
0.25: een float als sleutel
|
||||
|
||||
# Sleutels kunnen ook meerdere lijnen gebruiken met behulp van het vraagteken
|
||||
? |
|
||||
Dit is een sleutel
|
||||
met meerdere lijnen
|
||||
: en dit is de waarde
|
||||
|
||||
# YAML staat ook collectietypes toe in sleutels, maar veel programmeertalen
|
||||
# zullen hierover klagen.
|
||||
|
||||
# Sequences (gelijk aan lijsten of arrays) zien er zo uit:
|
||||
een_sequence:
|
||||
- Item 1
|
||||
- Item 2
|
||||
- 0.5 # sequences kunnen meerdere typen waardes bevatten.
|
||||
- Item 4
|
||||
- sleutel: waarde
|
||||
andere_sleutel: andere waarde
|
||||
-
|
||||
- Dit is een sequence
|
||||
- in een andere sequence
|
||||
|
||||
# Doordat YAML een superset van JSON is kan je ook mappen en
|
||||
# sequences volgens de JSON-stijl maken:
|
||||
json_map: {"sleutel": "waarde"}
|
||||
json_seq: [3, 2, 1, "takeoff"]
|
||||
|
||||
#######################
|
||||
# EXTRA YAML-FUNCTIES #
|
||||
#######################
|
||||
|
||||
# YAML heeft ook een handige functie genaamd 'anchors' (ankers), deze laten je
|
||||
# makkelijk de waarde van ergens anders in je document kopieëren. Beide sleutels
|
||||
# krijgen dezelfde waarde:
|
||||
geankert_content: &anker_naam Deze string zal verschijnen als waarde voor de twee sleutels
|
||||
andere_anker: *anker_naam
|
||||
|
||||
# YAML heeft ook tags, deze gebruik je om een expliciet type te verklaren
|
||||
expliciete_string: !!str 0.5
|
||||
# Sommige parsers gebruiken taalspecifieke tags, zoals deze voor Python's
|
||||
# complexe nummertype:
|
||||
python_complex_nummer: !!python/complex 1+2j
|
||||
|
||||
#######################
|
||||
# EXTRA TYPES IN YAML #
|
||||
#######################
|
||||
|
||||
# Strings en nummers zijn niet de enige types die YAML begrijpt.
|
||||
# ISO opgemaakte datum- en datumtijdnotaties werken ook:
|
||||
datumtijd: 2001-12-15T02:59:43.1Z
|
||||
datumtijd_met_spaties: 2001-12-14 21:59:43.10 -5
|
||||
datum: 2002-12-14
|
||||
|
||||
# De !!binary tag geeft aan dat de string een base64-gecodeerde
|
||||
# binary blob is.
|
||||
gif_bestand: !!binary |
|
||||
R0lGODlhDAAMAIQAAP//9/X17unp5WZmZgAAAOfn515eXvPz7Y6OjuDg4J+fn5
|
||||
OTk6enp56enmlpaWNjY6Ojo4SEhP/++f/++f/++f/++f/++f/++f/++f/++f/+
|
||||
+f/++f/++f/++f/++f/++SH+Dk1hZGUgd2l0aCBHSU1QACwAAAAADAAMAAAFLC
|
||||
AgjoEwnuNAFOhpEMTRiggcz4BNJHrv/zCFcLiwMWYNG84BwwEeECcgggoBADs=
|
||||
|
||||
# YAML heeft ook een settype, dat ziet er zo uit:
|
||||
set:
|
||||
? item1
|
||||
? item2
|
||||
? item3
|
||||
|
||||
# Zoals in Python zijn sets gewoon mappen met nulwaarden;
|
||||
# bovenstaand is gelijk aan:
|
||||
set2:
|
||||
item1: null
|
||||
item2: null
|
||||
item3: null
|
||||
```
|
Reference in New Issue
Block a user