diff options
| -rw-r--r-- | bash.html.markdown | 10 | ||||
| -rw-r--r-- | c++.html.markdown | 3 | ||||
| -rw-r--r-- | haskell.html.markdown | 2 | ||||
| -rw-r--r-- | it-it/bash-it.html.markdown | 275 | ||||
| -rw-r--r-- | it-it/json-it.html.markdown | 62 | ||||
| -rw-r--r-- | python.html.markdown | 52 | ||||
| -rw-r--r-- | standard-ml.html.markdown | 24 | 
7 files changed, 394 insertions, 34 deletions
| diff --git a/bash.html.markdown b/bash.html.markdown index 35bed9a2..e0c12f97 100644 --- a/bash.html.markdown +++ b/bash.html.markdown @@ -10,6 +10,7 @@ contributors:      - ["Anton Strömkvist", "http://lutic.org/"]      - ["Rahil Momin", "https://github.com/iamrahil"]      - ["Gregrory Kielian", "https://github.com/gskielian"] +    - ["Etan Reisner", "https://github.com/deryni"]  filename: LearnBash.sh  --- @@ -36,7 +37,14 @@ VARIABLE="Some string"  # But not like this:  VARIABLE = "Some string"  # Bash will decide that VARIABLE is a command it must execute and give an error -# because it couldn't be found. +# because it can't be found. + +# Or like this: +VARIABLE= 'Some string' +# Bash will decide that 'Some string' is a command it must execute and give an +# error because it can't be found. (In this case the 'VARIABLE=' part is seen +# as a variable assignment valid only for the scope of the 'Some string' +# command.)  # Using the variable:  echo $VARIABLE diff --git a/c++.html.markdown b/c++.html.markdown index 1a84efa4..ae93ceba 100644 --- a/c++.html.markdown +++ b/c++.html.markdown @@ -32,8 +32,7 @@ one of the most widely-used programming languages.  // variable declarations, primitive types, and functions.  // Just like in C, your program's entry point is a function called -// main with an integer return type, -// though void main() is also accepted by most compilers (gcc, clang, etc.) +// main with an integer return type.  // This value serves as the program's exit status.  // See http://en.wikipedia.org/wiki/Exit_status for more information.  int main(int argc, char** argv) diff --git a/haskell.html.markdown b/haskell.html.markdown index f28fcfe7..6a64442f 100644 --- a/haskell.html.markdown +++ b/haskell.html.markdown @@ -282,7 +282,7 @@ foldl (\x y -> 2*x + y) 4 [1,2,3] -- 43  foldr (\x y -> 2*x + y) 4 [1,2,3] -- 16  -- This is now the same as -(2 * 3 + (2 * 2 + (2 * 1 + 4))) +(2 * 1 + (2 * 2 + (2 * 3 + 4)))  ----------------------------------------------------  -- 7. Data Types diff --git a/it-it/bash-it.html.markdown b/it-it/bash-it.html.markdown new file mode 100644 index 00000000..f892845f --- /dev/null +++ b/it-it/bash-it.html.markdown @@ -0,0 +1,275 @@ +--- +category: tool +tool: 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"] +filename: LearnBash.sh +translators: +    - ["Robert Margelli", "http://github.com/sinkswim/"] +lang: it-it +--- + +Bash è il nome della shell di unix, la quale è stata distribuita anche come shell del sistema oprativo GNU e la shell di default su Linux e Mac OS X. +Quasi tutti gli esempi sottostanti possono fare parte di uno shell script o eseguiti direttamente nella shell. + +[Per saperne di piu'.](http://www.gnu.org/software/bash/manual/bashref.html) + +```bash +#!/bin/bash +# La prima riga dello script è lo shebang il quale dice al sistema come eseguire +# lo script: http://it.wikipedia.org/wiki/Shabang +# Come avrai già immaginato, i commenti iniziano con #. Lo shebang stesso è un commento. + +# Semplice esempio ciao mondo: +echo Ciao mondo! + +# Ogni comando inizia su una nuova riga, o dopo un punto e virgola: +echo 'Questa è la prima riga'; echo 'Questa è la seconda riga' + +# Per dichiarare una variabile: +VARIABILE="Una stringa" + +# Ma non così: +VARIABILE = "Una stringa" +# Bash stabilirà che VARIABILE è un comando da eseguire e darà un errore +# perchè non esiste. + +# Usare la variabile: +echo $VARIABILE +echo "$VARIABILE" +echo '$VARIABILE' +# Quando usi la variabile stessa - assegnala, esportala, oppure — scrivi +# il suo nome senza $. Se vuoi usare il valore della variabile, devi usare $. +# Nota che ' (singolo apice) non espande le variabili! + +# Sostituzione di stringhe nelle variabili +echo ${VARIABILE/Una/A} +# Questo sostituirà la prima occorrenza di "Una" con "La" + +# Sottostringa di una variabile +echo ${VARIABILE:0:7} +# Questo ritornerà solamente i primi 7 caratteri + +# Valore di default per la variabile +echo ${FOO:-"ValoreDiDefaultSeFOOMancaOÈ Vuoto"} +# Questo funziona per null (FOO=), stringa vuota (FOO=""), zero (FOO=0) ritorna 0 + +# Variabili builtin: +# Ci sono delle variabili builtin molto utili, come +echo "Valore di ritorno dell'ultimo programma eseguito: $?" +echo "PID dello script: $$" +echo "Numero di argomenti: $#" +echo "Argomenti dello script: $@" +echo "Argomenti dello script separati in variabili distinte: $1 $2..." + +# Leggere un valore di input: +echo "Come ti chiami?" +read NOME # Nota che non abbiamo dovuto dichiarare una nuova variabile +echo Ciao, $NOME! + +# Classica struttura if: +# usa 'man test' per maggiori informazioni sulle condizionali +if [ $NOME -ne $USER ] +then +    echo "Il tuo nome non è lo username" +else +    echo "Il tuo nome è lo username" +fi + +# C'è anche l'esecuzione condizionale +echo "Sempre eseguito" || echo "Eseguito solo se la prima condizione fallisce" +echo "Sempre eseguito" && echo "Eseguito solo se la prima condizione NON fallisce" + +# Per usare && e || con l'if, c'è bisogno di piu' paia di parentesi quadre: +if [ $NOME == "Steve" ] && [ $ETA -eq 15 ] +then +    echo "Questo verrà eseguito se $NOME è Steve E $ETA è 15." +fi + +if [ $NOME == "Daniya" ] || [ $NOME == "Zach" ] +then +    echo "Questo verrà eseguito se $NAME è Daniya O Zach." +fi + +# Le espressioni sono nel seguente formato: +echo $(( 10 + 5 )) + +# A differenza di altri linguaggi di programmazione, bash è una shell - quindi lavora nel contesto +# della cartella corrente. Puoi elencare i file e le cartelle nella cartella +# corrente con il comando ls: +ls + +# Questi comandi hanno opzioni che controllano la loro esecuzione: +ls -l # Elenca tutti i file e le cartelle su una riga separata + +# I risultati del comando precedente possono essere passati al comando successivo come input. +# Il comando grep filtra l'input con il pattern passato. Ecco come possiamo elencare i +# file .txt nella cartella corrente: +ls -l | grep "\.txt" + +# Puoi redirezionare l'input e l'output del comando (stdin, stdout, e stderr). +# Leggi da stdin finchè ^EOF$ e sovrascrivi hello.py con le righe +# comprese tra "EOF": +cat > hello.py << EOF +#!/usr/bin/env python +from __future__ import print_function +import sys +print("#stdout", file=sys.stdout) +print("#stderr", file=sys.stderr) +for line in sys.stdin: +    print(line, file=sys.stdout) +EOF + +# Esegui hello.py con diverse redirezioni stdin, stdout, e stderr: +python hello.py < "input.in" +python hello.py > "output.out" +python hello.py 2> "error.err" +python hello.py > "output-and-error.log" 2>&1 +python hello.py > /dev/null 2>&1 +# Lo output error sovrascriverà il file se esiste, +# se invece vuoi appendere usa ">>": +python hello.py >> "output.out" 2>> "error.err" + +# Sovrascrivi output.txt, appendi a error.err, e conta le righe: +info bash 'Basic Shell Features' 'Redirections' > output.out 2>> error.err +wc -l output.out error.err + +# Esegui un comando e stampa il suo file descriptor (esempio: /dev/fd/123) +# vedi: man fd +echo <(echo "#ciaomondo") + +# Sovrascrivi output.txt con "#helloworld": +cat > output.out <(echo "#helloworld") +echo "#helloworld" > output.out +echo "#helloworld" | cat > output.out +echo "#helloworld" | tee output.out >/dev/null + +# Pulisci i file temporanei verbosamente (aggiungi '-i' per la modalità interattiva) +rm -v output.out error.err output-and-error.log + +# I comandi possono essere sostituiti con altri comandi usando $( ): +# Il comando seguente mostra il numero di file e cartelle nella +# cartella corrente. +echo "Ci sono $(ls | wc -l) oggetti qui." + +# Lo stesso puo' essere usato usando backticks `` ma non possono essere innestati - il modo migliore +# è usando $( ). +echo "Ci sono `ls | wc -l` oggetti qui." + +# Bash utilizza uno statemente case che funziona in maniera simile allo switch in Java e C++: +case "$VARIABILE" in  +    #Lista di pattern per le condizioni che vuoi soddisfare +    0) echo "C'è uno zero.";; +    1) echo "C'è un uno.";; +    *) echo "Non è null.";; +esac + +# I cicli for iterano per ogni argomento fornito: +# I contenuti di $VARIABILE sono stampati tre volte. +for VARIABILE in {1..3} +do +    echo "$VARIABILE" +done + +# O scrivilo con il "ciclo for tradizionale": +for ((a=1; a <= 3; a++)) +do +    echo $a +done + +# Possono essere usati anche per agire su file.. +# Questo eseguirà il comando 'cat' su file1 e file2 +for VARIABILE in file1 file2 +do +    cat "$VARIABILE" +done + +# ..o dall'output di un comando +# Questo eseguirà cat sull'output di ls. +for OUTPUT in $(ls) +do +    cat "$OUTPUT" +done + +# while loop: +while [ true ] +do +    echo "corpo del loop..." +    break +done + +# Puoi anche definire funzioni +# Definizione: +function foo () +{ +    echo "Gli argomenti funzionano come gli argomenti dello script: $@" +    echo "E: $1 $2..." +    echo "Questa è una funzione" +    return 0 +} + +# o semplicemente +bar () +{ +    echo "Un altro modo per dichiarare funzioni!" +    return 0 +} + +# Per chiamare la funzione +foo "Il mio nome è" $NOME + +# Ci sono un sacco di comandi utili che dovresti imparare: +# stampa le ultime 10 righe di file.txt +tail -n 10 file.txt +# stampa le prime 10 righe di file.txt +head -n 10 file.txt +# ordina le righe di file.txt +sort file.txt +# riporta o ometti le righe ripetute, con -d le riporta +uniq -d file.txt +# stampa solamente la prima colonna prima del carattere ',' +cut -d ',' -f 1 file.txt +# sostituisce ogni occorrenza di 'okay' con 'great' in file.txt (compatible con le regex) +sed -i 's/okay/great/g' file.txt +# stampa su stdout tutte le righe di file.txt che soddisfano una certa regex +# L'esempio stampa le righe che iniziano con "foo" e che finiscono con "bar" +grep "^foo.*bar$" file.txt +# passa l'opzione "-c" per stampare invece il numero delle righe che soddisfano la regex +grep -c "^foo.*bar$" file.txt +# se vuoi letteralmente cercare la stringa, +# e non la regex, usa fgrep (o grep -F) +fgrep "^foo.*bar$" file.txt  + + +# Leggi la documentazione dei builtin di bash con il builtin 'help' di bash: +help +help help +help for +help return +help source +help . + +# Leggi la manpage di bash con man +apropos bash +man 1 bash +man bash + +# Leggi la documentazione con info (? per help) +apropos info | grep '^info.*(' +man info +info info +info 5 info + +# Leggi la documentazione di bash: +info bash +info bash 'Bash Features' +info bash 6 +info --apropos bash +``` diff --git a/it-it/json-it.html.markdown b/it-it/json-it.html.markdown new file mode 100644 index 00000000..0c401753 --- /dev/null +++ b/it-it/json-it.html.markdown @@ -0,0 +1,62 @@ +--- + +language: json +contributors: +  	- ["Anna Harren", "https://github.com/iirelu"] +  	- ["Marco Scannadinari", "https://github.com/marcoms"] +translators: +    - ["Robert Margelli", "http://github.com/sinkswim/"] +lang: it-it + +--- + +Dato che JSON è un formato per lo scambio di dati estremamente semplice, questo sarà con molta probabilità +il più semplice Learn X in Y Minutes. + +Nella sua forma più pura JSON non ha commenti, ma molti parser accettano +commenti in stile C (//, /\* \*/). Per lo scopo prefissato, tuttavia, tutto sarà +100% JSON valido. Fortunatamente, si spiega da sè. + +```json +{ +  "chiave": "valore", +   +  "chiavi": "devono sempre essere racchiuse tra doppi apici", +  "numeri": 0, +  "stringhe": "Ciaø, møndø. Tutti gli unicode sono permessi, assieme con l \"escaping\".", +  "ha booleani?": true, +  "il nulla": null, + +  "numero grande": 1.2e+100, + +  "oggetti": { +    "commento": "La maggior parte della tua struttura viene dagli oggetti.", + +    "array": [0, 1, 2, 3, "Gli array possono contenere qualsiasi cosa.", 5], + +    "un altro oggetto": { +      "commento": "Queste cose possono essere annidate, molto utile." +    } +  }, + +  "sciocchezze": [ +    { +      "sorgenti di potassio": ["banane"] +    }, +    [ +      [1, 0, 0, 0], +      [0, 1, 0, 0], +      [0, 0, 1, "neo"], +      [0, 0, 0, 1] +    ] +  ], +   +  "stile alternativo": { +    "commento": "Guarda quà!" +  , "posizione della virgola": "non conta - fintantochè è prima del valore, allora è valida" +  , "un altro commento": "che bello" +  }, + +  "è stato molto breve": "Ed hai finito. Adesso sai tutto cio che JSON ha da offrire." +} +``` diff --git a/python.html.markdown b/python.html.markdown index 668e04f9..ace3f794 100644 --- a/python.html.markdown +++ b/python.html.markdown @@ -46,7 +46,7 @@ to Python 2.x. For Python 3.x, take a look at the [Python 3 tutorial](http://lea  2.0     # This is a float  11.0 / 4.0  # => 2.75 ahhh...much better -# Result of integer division truncated down both for positive and negative.  +# Result of integer division truncated down both for positive and negative.  5 // 3     # => 1  5.0 // 3.0 # => 1.0 # works on floats too  -5 // 3  # => -2 @@ -141,12 +141,8 @@ bool("")  # => False  ## 2. Variables and Collections  #################################################### -# Python has a print statement, in all 2.x versions but removed from 3. +# Python has a print statement  print "I'm Python. Nice to meet you!" -# Python also has a print function, available in versions 2.7 and 3... -# but for 2.7 you need to add the import (uncommented): -# from __future__ import print_function -print("I'm also Python! ")  # No need to declare variables before assigning to them.  some_var = 5    # Convention is to use lower_case_with_underscores @@ -195,14 +191,14 @@ li[2:]  # => [4, 3]  li[:3]  # => [1, 2, 4]  # Select every second entry  li[::2]   # =>[1, 4] -# Revert the list +# Reverse a copy of the list  li[::-1]   # => [3, 4, 2, 1]  # Use any combination of these to make advanced slices  # li[start:end:step]  # Remove arbitrary elements from a list with "del"  del li[2]   # li is now [1, 2, 3] - +r  # You can add lists  li + other_li   # => [1, 2, 3, 4, 5, 6]  # Note: values for li and for other_li are not modified. @@ -316,11 +312,11 @@ some_var = 5  # Here is an if statement. Indentation is significant in python!  # prints "some_var is smaller than 10"  if some_var > 10: -    print("some_var is totally bigger than 10.") +    print "some_var is totally bigger than 10."  elif some_var < 10:    # This elif clause is optional. -    print("some_var is smaller than 10.") +    print "some_var is smaller than 10."  else:           # This is optional too. -    print("some_var is indeed 10.") +    print "some_var is indeed 10."  """ @@ -332,7 +328,7 @@ prints:  """  for animal in ["dog", "cat", "mouse"]:      # You can use % to interpolate formatted strings -    print("%s is a mammal" % animal) +    print "%s is a mammal" % animal  """  "range(number)" returns a list of numbers @@ -344,7 +340,7 @@ prints:      3  """  for i in range(4): -    print(i) +    print i  """  "range(lower, upper)" returns a list of numbers @@ -356,7 +352,7 @@ prints:      7  """  for i in range(4, 8): -    print(i) +    print i  """  While loops go until a condition is no longer met. @@ -368,7 +364,7 @@ prints:  """  x = 0  while x < 4: -    print(x) +    print x      x += 1  # Shorthand for x = x + 1  # Handle exceptions with a try/except block @@ -391,7 +387,7 @@ else:   # Optional clause to the try/except block. Must follow all except blocks  # Use "def" to create new functions  def add(x, y): -    print("x is %s and y is %s" % (x, y)) +    print "x is %s and y is %s" % (x, y)      return x + y    # Return values with a return statement  # Calling functions with parameters @@ -420,8 +416,8 @@ keyword_args(big="foot", loch="ness")   # => {"big": "foot", "loch": "ness"}  # You can do both at once, if you like  def all_the_args(*args, **kwargs): -    print(args) -    print(kwargs) +    print args +    print kwargs  """  all_the_args(1, 2, a=3, b=4) prints:      (1, 2) @@ -443,14 +439,14 @@ def pass_all_the_args(*args, **kwargs):      print varargs(*args)      print keyword_args(**kwargs) -# Function Scope                                                                 +# Function Scope  x = 5  def setX(num):      # Local var x not the same as global variable x      x = num # => 43      print x # => 43 -     +  def setGlobalX(num):      global x      print x # => 5 @@ -517,10 +513,10 @@ class Human(object):  # Instantiate a class  i = Human(name="Ian") -print(i.say("hi"))     # prints out "Ian: hi" +print i.say("hi")     # prints out "Ian: hi"  j = Human("Joel") -print(j.say("hello"))  # prints out "Joel: hello" +print j.say("hello")  # prints out "Joel: hello"  # Call our class method  i.get_species()   # => "H. sapiens" @@ -540,12 +536,12 @@ Human.grunt()   # => "*grunt*"  # You can import modules  import math -print(math.sqrt(16))  # => 4 +print math.sqrt(16)  # => 4  # You can get specific functions from a module  from math import ceil, floor -print(ceil(3.7))  # => 4.0 -print(floor(3.7))   # => 3.0 +print ceil(3.7)  # => 4.0 +print floor(3.7)   # => 3.0  # You can import all functions from a module.  # Warning: this is not recommended @@ -591,7 +587,7 @@ xrange_ = xrange(1, 900000000)  # will double all numbers until a result >=30 found  for i in double_numbers(xrange_): -    print(i) +    print i      if i >= 30:          break @@ -620,8 +616,8 @@ def say(say_please=False):      return msg, say_please -print(say())  # Can you buy me a beer? -print(say(say_please=True))  # Can you buy me a beer? Please! I am poor :( +print say()  # Can you buy me a beer? +print say(say_please=True)  # Can you buy me a beer? Please! I am poor :(  ```  ## Ready For More? diff --git a/standard-ml.html.markdown b/standard-ml.html.markdown index b545f3e1..07896beb 100644 --- a/standard-ml.html.markdown +++ b/standard-ml.html.markdown @@ -3,13 +3,14 @@ language: "Standard ML"  contributors:      - ["Simon Shine", "http://shine.eu.org/"]      - ["David Pedersen", "http://lonelyproton.com/"] +    - ["James Baker", "http://www.jbaker.io/"]  ---  Standard ML is a functional programming language with type inference and some  side-effects.  Some of the hard parts of learning Standard ML are: Recursion,  pattern matching, type inference (guessing the right types but never allowing -implicit type conversion).  If you have an imperative background, not being able -to update variables can feel severely inhibiting. +implicit type conversion). Standard ML is distinguished from Haskell by including +references, allowing variables to be updated.  ```ocaml  (* Comments in Standard ML begin with (* and end with *).  Comments can be @@ -383,6 +384,25 @@ val test_poem = readPoem "roses.txt"  (* gives [ "Roses are red,",                                                   "Violets are blue.",                                                   "I have a gun.",                                                   "Get in the van." ] *) + +(* We can create references to data which can be updated *) +val counter = ref 0 (* Produce a reference with the ref function *) + +(* Assign to a reference with the assignment operator *) +fun set_five reference = reference := 5 + +(* Read a reference with the dereference operator *) +fun equals_five reference = !reference = 5 + +(* We can use while loops for when recursion is messy *) +fun decrement_to_zero r = if !r < 0 +                          then r := 0 +                          else while !r >= 0 do r := !r - 1 + +(* This returns the unit value (in practical terms, nothing, a 0-tuple) *) + +(* To allow returning a value, we can use the semicolon to sequence evaluations *) +fun decrement_ret x y = (x := !x - 1; y)  ```  ## Further learning | 
