Introduction to the Swift REPL

Oggi vi parliamo di un nuovo articolo uscito sul blog ufficiale di apple

Xcode 6.1 introduce un altro modo di sperimentare con Swift, : REPL grazie alla quale il tuo codice verrà eseguito istantaneamente, mentre lo state compilando. Gli sviluppatori che hanno familiarità con linguaggi interpretati sentirete a vostro agio in questo ambiente da riga di comando, e anche sviluppatori esperti troveranno alcune caratteristiche uniche. Per iniziare, avviare Terminal.app (trovati in / Applicazioni / Utility).

Sarete quindi in Swift REPL:

Welcome to Swift version 1.1 (swift-600.0.20.0). Type :help for assistance.
  1>  

Tutto quello che dovete fare è digitare dichiarazioni Swift e il REPL immediatamente eseguirà il codice sotto i vostri occhi. I risultati delle  varie espressioni vengono formattati automaticamente e visualizzati con il loro tipo, stessa cosa per variabili e dichiarazioni di costanti. Un esempio:

  1> "100".toInt()
$R0: Int? = 100
  2> let name = "Katherine"
name: String = "Katherine"
  3> println("Hello, \(name)")
Hello, Katherine

Si noti che al risultato dalla prima linea è stato assegnato un nome dal REPL, anche se il risultato dell’espressione non è esplicitamente assegnato . È possibile riutilizzare i loro valori in dichiarazioni successive:

  4> $R0! + 200
$R1: Int = 300

Il compilatore Swift riconosce il codice incompleto  e richiederà un ulteriore ingresso, se necessario. Il codice sarà addirittura rientrato automaticamente comeaccadrebbe in Xcode. Per esempio, iniziando una funzione:

5> func timesTwo() {
6.		

La richiesta per le linee di continuazione è un numero di riga, seguito da un periodo al posto dall’indicazione di una nuova dichiarazione, in modo da poter vedere a colpo d’occhio quando viene chiesto di compilare un frammento di codice. A questo punto è possibile continuare a digitare le linee rimanenti nel metodo:

5> func timesTwo() {
6.		return value * 2
7. } 

 

Ci sono tre punti degni di nota: il primo è che la linea sei in origine era indentata, ma la REPL toglie l’indentazione automaticamente quando nel momento in cui digitiamo la parentesi di chiusura. Il secondo è che la funzione fa riferimento a un parametro che abbiamo dimenticato di dichiarare e ha bisogno di un tipo di ritorno, quindi avrai bisogno di aggiungerlo nella dichiarazione. L’ultima è che, anche se è stato premuto il ritorno dopo l’ultima riga, si può correggere senza incorrere in errori.

 

Multi-Line

Quando il codice viene inviato al compilatore è anche registrata nella memoria di REPL, il che rende la correzione degli errori banalE. Se si fosse premuto invio alla fine della dichiarazione di funzione incompleta, si sarebbe presentato un messaggio di errore.
E’ possibile richiamare l’ultima selezione premendo il tasto freccia verso l’alto dal prompt. Il REPL riporta tutte e tre le linee nel nostro esempio, e posiziona il cursore alla fine. A questo punto è possibile procedere con la modifica del codice per correggere l’errore, come descritto nella sezione successiva.

 

Multi-Line Editing

 

Anche se il REPL si comporta come un editor di linea tradizionale, fornisce anche funzioni utili per trattare con input multi-linea come la maggior parte delle dichiarazioni di classe o funzione. Nell’esempio qui sopra, prima di premere invio sulla linea finale è possibile premere freccia per spostare il cursore fino alla linea di dichiarazione, quindi utilizzare la freccia sinistra per spostare il cursore subito dopo la parentesi aperta per l’elenco di parametri:

5> func timesTwo() {

6.		return value * 2
7. }

Digitare la dichiarazione dei parametri, premere la freccia destra per spostarsi oltre la parentesi di chiusura e premere invio:

5> func timesTwo(value: Int) -> Int{
6.		return value * 2
7. }

Non si può premere Invio per completare la dichiarazione a questo punto, perché si è nel bel mezzo di un blocco di testo. La pressione di ritorno qui equivarrebbe ad inserire un’interruzione di riga, che può essere utile se si sta cercando di inserire altre righe nel corpo di una funzione o di un metodo, ma nel nostro caso ci si vuole spostare alla fine della dichiarazione. È possibile premere freccia giù due volte per questo scopo, o utilizzare la sequenza di Emacs ESC> (il tasto ESC seguito da una parentesi angolare di chiusura). Premendo invio alla fine dell’ultima riga compilerà la nuova funzione dichiarata in modo che sia pronto per l’uso:

  8>  timesTwo(21)
$R2: (Int) = 42

Rilevamento automatico di completamento delle istruzioni significa che si può semplicemente digitare il codice e il REPL ci suggerirà dei completamente. Si consideri il seguente codice:

func foo() {
	bar()
}
func bar() {
	foo()
}

Digitando tutto sopra riga per riga comporterà cercare di compilare la prima funzione una volta che la terza linea è completa, e naturalmente questo genera un errore:

error: use of unresolved identifier 'bar'

Si potrebbe dichiarare entrambe le funzioni su una singola linea per ottenere il rilevamento del completamento automatico che avviene quando si preme invio, ma c’è una soluzione migliore. Dopo aver digitato la terza linea di cui sopra è possibile premere la freccia verso il basso per passare a creare manualmente una quarta linea, e digitare il resto normalmente. Le due dichiarazioni sono compilate insieme, per raggiungere l’obiettivo desiderato di mutua ricorsione.

Guida di riferimento rapido

Per aiutarti, ecco un grafico a portata di mano con alcuni dei tasti di modifica e di navigazione veloce più utilizzati in REPL:

Arrow Keys		Move cursor left/right/up/down
Control+F		Move cursor right one character, same as right arrow
Control+B		Move cursor left one character, same as left arrow
Control+N		Move cursor to end of next line, same as down arrow
Control+P		Move cursor to end of prior line, same as up arrow
Control+D		Delete the character under the cursor
Option+Left		Move cursor to start of prior word
Option+Right	Move cursor to start of next word
Control+A		Move cursor to start of current line
Control+E		Move cursor to end of current line
Delete			Delete the character to the left of the cursor
Esc <			Move cursor to start of first line
Esc >			Move cursor to end of last line

VOLETE ESSERE AGGIORNATI TEMPESTIVAMENTE ALL'USCITA DI UN NUOVO CAPITOLO ? BASTA UN LIKE SULLA NOSTRA PAGINA FACEBOOK!