Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Tutto e di + - The Swift Programming Language
Forum - Tutto e di + - The Swift Programming Language

Pagine: [ 1 2 3 ] Precedente | Prossimo
Avatar
R0gerBlack (Member)
Expert


Messaggi: 210
Iscritto: 10/06/2010

Segnala al moderatore
Postato alle 21:50
Martedì, 03/06/2014
Salve a tutti.

Non so se avete seguito recentemente gli avvenimenti della WWDC (Worldwide Developer Conference) della Apple, ma oltre alle solite novità (nuovo iOS, ecc.) hanno presentato anche un nuovo linguaggio (con il motto "Objective-C without the C")

(Link immagine)
http://cdn2.vox-cdn.com/assets/4553317/Objc.jpg

Utilizza i framework Cocoa e Cocoa Touch. Si sviluppa utilizzando l'IDE Xcode. Forniscono una documentazione completa ed è possibile mandare app sull'App Store
http://wpuploads.appadvice.com/wp-content/uploads/2014/06/ ...

Una differenza molto importante (oltre a una sintassi più leggera, cosiddetta senza "code noise") è che a differenza dell'Objective-C, Swift è un linguaggio multi-paradigma (Orientato agli oggetti, Funzionale, Imperativo, Strutturato a blocchi).

Per esempio questo codice (Da notare l'assenza di punti e virgola)
Codice sorgente - presumibilmente Plain Text

  1. println("Hello, world")



non è solamente una riga di codice, ma un programma completo. Scritto così com'è potrà essere eseguito, senza includere librerie.

Ora, probabilmente molti in questo sito non hanno avuto a che fare molto con Objective-C, tuttavia ha suscitato il suo interesse (come per lo stesso Piero che ha fatto una videolezione sulla programmazione di app per iPhone e pubblicò il gioco 3d tunnel), tuttavia, avendo io avuto (poco) a che fare con Objective-C illustrerò qualche differenza introdotta (tratte da quello che ho capito del linguaggio)

Questo blocco di codice dichiara una stringa che ingloba il valore di 3 variabili differenti.
Codice sorgente - presumibilmente Tutto e di +

  1. // Objective-C
  2. NSString *make = @"Porsche";
  3. NSString *model = @"911";
  4. int year = 1968;
  5. NSString *message = [NSString stringWithFormat:@"That's a %@ %@ from %d!",
  6.                      make, model, year];



Sintassi molto lunga per l'ultima riga, in Swift diventa

Codice sorgente - presumibilmente Delphi

  1. var make = "Porche"
  2. var model = "911"
  3. var year = 1968
  4. var message = "That's a \(make) \(model) from \(year)."



Notevolmente più semplice, no?
Le prime cose che si notano sono: La mancanza di punti e virgola, non si specifica un tipo per le variabili e c'è un'interpretazione delle variabili tra le apici (che personalmente mi ricorda il PHP).

Per dichiarare costanti invece si usa questa forma
Codice sorgente - presumibilmente Tutto e di +

  1. let x = 5


(e qui mi ricorda fortemente F#, come anche la caratteristica della programmazione imperativa)

È comunque possibile specificare un tipo quando mancano informazioni oppure quando non si specifica nella dichiarazione mettendo il simbolo due punti (:) davanti al nome della variabile seguito dal Tipo:
Codice sorgente - presumibilmente VB.NET

  1. let IntegerImplicito = 70
  2. let DoubleImplicito = 70.0
  3. let DoubleEsplicito: Double = 70



Fin qui sembra qualcosa di vagamente visto in altri linguaggi, ma ecco qualche peculiarità del linguaggio.
La documentazione Apple recita
"You can use almost any character you like for constant and variable names, including Unicode characters:"
e riporta questo esempio

Codice sorgente - presumibilmente Tutto e di +

  1. let π = 3.14159
  2. let 你好 = "你好世界"
  3. let 🐶🐮 = "dogcow"



(EDIT: Il forum non interpreta i caratteri, per vedere l'esempio andate qui https://developer.apple.com/library/prerelease/ios/document ...
Una cosa che mi piace molto rispetto all'Objective-C è che una classe si dichiara semplicemente con la keyword class seguita dal nome

Codice sorgente - presumibilmente Tutto e di +

  1. class SomeClass {
  2.     // class definition goes here
  3. }



Esempio di funzioni

Codice sorgente - presumibilmente Tutto e di +

  1. class Counter {
  2.     var count = 0
  3.     func increment() {
  4.         count++
  5.     }
  6.     func incrementBy(amount: Int) {
  7.         count += amount
  8.     }
  9.     func reset() {
  10.         count = 0
  11.     }
  12. }



E non mi voglio dilungare ulteriormente.
Per concludere con il linguaggio, voglio dire che sebbene sembri una specie di nuovo linguaggio ad alto livello (tipo Javascript o F#), un'altra grande peculiarità di Swift è che viene compilato con il compilatore LLVM, quindi in codice nativo, cosa che garantisce alte prestazioni (dopo tutto, delle app ad alto livello sarebbero state facilmente "portate" ad altri SO). Oltre a questo, Swift ha una retrocompatibilità totale (eccetto il wrapping di classi C++ che andrà fatto con classi Objective-C) con l'Objective-C e il C, quindi si potrà utilizzare la vecchia sintassi.

È disponibile una documentazione di 500 pagine su iBooks Store o qui (https://developer.apple.com/library/prerelease/ios/document ...

Visto che su Pierotofy, sebbene siano presenti molti linguaggi per inviare i programmi (Tra cui il Lua, che, non per minimizzarlo, non conta un solo programma all'interno del sito e Fortran che ne conta solo 1), manca qualcosa come l'Objective-C, non si potrebbe aggiungere ora Swift o Swift/Objective-C (visto che è retrocompatibile) e il supporto al linguaggio omonimo nei blocchi di codice (sono curioso di vedere come li interpreta oltre al Plain Text)?

Che ne pensate tutto sommato del linguaggio?

Ultima modifica effettuata da R0gerBlack il 08/06/2014 alle 19:38
PM Quote
Avatar
pbe (Normal User)
Pro


Messaggi: 131
Iscritto: 24/05/2014

Segnala al moderatore
Postato alle 18:24
Mercoledì, 04/06/2014
Secondo me questo linguaggio è interessante in quanto può essere usato per semplicare notevolmente il lavoro di programmatori per iOs.

Io in questo campo non ho mai lavorato però sono sicuro che un nuovo linguaggio più semplice più fluido è sicuramente una svolta, dato che è anche retro-compatibile e che quindi può essere usato per aggiornare app scritte in maniera un po arcaica e magari troppo complessa
:k:

Ultima modifica effettuata da pbe il 04/06/2014 alle 18:27
PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 19:37
Mercoledì, 04/06/2014
Ne penso due cose...

1. Come con le lingue "vere", credo sia meglio conoscerne un paio a dovere e saperle usare per esprimere ogni sfumatura di significato, piuttosto che conoscerne venti così così e non saper come esprimere altro che i concetti di base. (quando poi, come nel mio caso, se ne conosce giusto una così così... ma questa è un'altra storia)

2. Apple è nota per tirar fuori dal cappello ogni tre per due una novità che verrà regolarmente affossata nel giro di pochi anni per sostituirla con una ulteriore novità che rivoluziona tutto buttando alle ortiche gli sforzi degli utenti di tenersi al passo. Anche per scucire fior di soldoni dalle loro tasche, ovviamente. Per quanto mi riguarda, proprio per questo considero Apple morta e sepolta. Non mi avranno più. (parola di fan sfegatato della mela arcobaleno, morta, sepolta e putrefatta insieme ai suoi fan per decisione univoca di quel tale... Steve Jobs)

Ne deriva che intendo tenermi alla larga da questa trovata.

PM Quote
Avatar
ZioCrocifisso (Member)
Pro


Messaggi: 135
Iscritto: 06/03/2013

Segnala al moderatore
Postato alle 21:18
Mercoledì, 04/06/2014
È già nato vecchio questo linguaggio. Aggiungerà qualcosa a Objective-C, ma nulla di nuovo rispetto agli altri linguaggi. E riguardo al fatto di essere multi paradigma, nessuno userà mai questo linguaggio come un linguaggio funzionale, anche perché sicuramente, come quasi tutti gli altri linguaggi multi paradigma, non ha realmente nulla di funzionale, se non roba già supportata in tutti gli altri linguaggi imperativi che non permette la programmazione funzionale vera e propria. Gli altri tre paradigmi invece sono presenti in quasi tutti i linguaggi orientati agli oggetti. Riguardo all'Unicode invece, non è né una novità, né una cosa utile. Sono fastidiosi infatti gli identificatori con caratteri Unicode perché difficilmente scrivibili con la tastiera. Al massimo può servire per le lingue straniere, ma la maggior parte dei programmatori esperti scrive in inglese, anche se la sua lingua usa l'alfabeto latino e quindi sarebbe supportata da un linguaggio ASCII.

PM Quote
Avatar
Roby94 (Member)
Guru


Messaggi: 1170
Iscritto: 28/12/2009

Segnala al moderatore
Postato alle 3:29
Giovedì, 05/06/2014
Quoto praticamente tutto quello detto nei commenti da Aldo e Zio. Questa è una toppa abbastanza ridicola, il linguaggio che va a sostituire poteva già nascere in chiave più umana.
Codice sorgente - presumibilmente Tutto e di +

  1. // Objective-C
  2. NSString *make = @"Porsche";
  3. NSString *model = @"911"; int year = 1968;
  4. NSString *message = [NSString stringWithFormat:@"That's a %@ %@ from %d!", make, model, year];


Neanche al tempo del basic si vedevano schifezze simili. Per tanto sembra un reinventare l'acqua calda in un paese dove non si è mai vista.
Comprendendo, che è meglio accorgersi dei propri errori, prima o poi, invece di mai, possiamo anche chiudere un occhio.

Altra cosa che non comprendo è perché alla creazione di un nuovo linguaggio si cerchi sempre di reinventare (e scusatemi se mi ripeto) l'acqua calda in chiave moderna.
Codice sorgente - presumibilmente Tutto e di +

  1. let DoubleEsplicito: Double = 70


Questa tipizzazione sembra molto arrampicata sul muro, va bene che la mela è famosa per la sua originalità(?!?!?) ma una classica scrittura [type nomevaribile = valorevariabile;] non è più vicina alla programmazione comune? Sembrano ridicolo ma sono sicuro che chiunque abbia provato il VB.NET dopo i linguaggi C-like abbia storto il naso di fronte al [Dim nomevariabile As type] è in quel caso c'era almeno la scusante di voler creare un linguaggio più vicino a quello parlato.

Se vogliamo continuare sul percorso dei tipi, siamo sicuri che omettere l'obbligo di dichiarazione del tipo sia una buona idea? Non solo dal punto di vista del compilatore ma anche da quello del programmatore che con una forte tipizzazione è meno portato ad errori che si possono definire "stupidi".

Passiamo alle variabili unicode, ok a tutti piace la costante con il simbolo Pi Greco, ma seriamente chi mai lo utilizzerebbe??? A meno di macro per fare gli splendidi mi pare una complicazione ridicola che si poteva e forse era meglio evitare, voglio vedere il caro amico programmatore che andrà a leggersi un codice non suo scritto con tali caratteri, vediamo dopo quanti minuti sclera.

Mi piacerebbe invece comprendere meglio la faccenda riguardante la funzione che comprende già al suo interno un programma, mi pare interessante ma non vedo i vantaggi (visto che conosco pochissimo la funzionalità di Objective-C), sarei grato a chiunque, se li mettesse in luce.

In ultimo vorrei aggiungere che la programmazione ad oggetti dovrebbe essere ormai standard, non starci molto a girare su se si può o non si può usare, in un linguaggio deve esserci ed essere usata, parere mio se volete scannatemi XD

Per concludere vorrei riagganciarmi al discorso di Aldo. Negli anni abbiamo visto saltar fuori tanti linguaggi che alla fine si sono rivelati tanto inutili quanto snobbati, c'è veramente necessita di sviluppare nuovi linguaggi che cambino due meccaniche ma per il resto siano la copia sputata di altri?
Per quanto riguarda le lingue abbiamo dalla loro il fatto che siano legate storicamente e culturalmente al popolo che le possiede, funzionalmente pero cerchiamo una lingua comune per poter comunicare senza problemi di comprensione. Perché nella programmazione invece facciamo l'esatto contrario?

Spero in una vostra risposta.
Grazie.

PM Quote
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6230
Iscritto: 04/12/2003

Segnala al moderatore
Postato alle 7:08
Giovedì, 05/06/2014
Sono rimasto un po' sorpreso dalla scelta di Apple di sviluppare un nuovo linguaggio, per qualche tempo speravo scegliessero Ruby come rimpiazzo per Obj-C, evidentemente non gli andava bene.

Non ho ancora letto la guida ufficiale (lettura per le prossime settimane), ma c'e' posto eccome per un linguaggio che rimpiazzi Obj-C. Non penso lo scopo sia quello di introdurre un linguaggio novello (da quel poco che ho visto, non sembra introdurre novita'), bensi' di fornire un'opzione piu' moderna a Obj-C. Si poteva usare un altro linguaggio come base? Sicuramente. Pero' siamo qui... con questo Swift.

Potrebbe essere un buon investimento di tempo impararlo, siccome Apple lo trattera' come il linguaggio preferito per le loro piattaforme (piu' o meno come Obj-C).

Buono studio!

p.s. possiamo aprire una sezione nei tutorials e nei sorgenti senza difficolta'. Il syntax highlighting dovra' attendere un po' credo, siccome usiamo questo: http://qbnz.com/highlighter/

Ultima modifica effettuata da pierotofy il 05/06/2014 alle 7:10


Il mio blog: https://piero.dev
PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 14:16
Giovedì, 05/06/2014
Mi si permetta d'essere ancora più esplicito: ho la forte impressione che questo continuo cambiare le carte in tavola sia un modo per tagliare fuori chi non appartiene a una cerchia che si vuole costituita da "iniziati" ed alquanto esclusiva. Mi piacerebbe usare il termine "casta", ma oggigiorno è un po' inflazionato e potrebbe dare luogo a fraintendimenti.

Un buon linguaggio, per quel poco che ne capisco, è quello che non cambia mai nei suoi fondamenti di base e che, tutt'al più, si estende con funzionalità di più alto livello in aggiunta a quelle basi.

Dico una sciocchezza se affermo che il C++ è quel tipo di linguaggio? Esisteva il C, che permetteva d'arrivare fino a un certo punto. E' stato definito il C++, che è pienamente compatibile con il C (in effetti, credo di poter affermare che il C è un "subset" del C++, giusto?) e che permette di spingersi oltre. Col C++ si possono definire infinite classi in grado di fare praticamente qualsiasi cosa -- includi quelle classi e hai a disposizione l'universo che lì per lì ritieni ti possa servire. Inoltre, se ne hai le capacità, puoi "modellare" da solo le classi esattamente come le hai bisogno, non devi per forza attenerti a caratteristiche "chiuse" e predeterminate. Se una classe ti aggrada ma non è esattamente modellata come l'hai bisogno puoi estenderla o personalizzarla con l'ereditarietà e chissà quanti altri aspetti del C++ dei quali ho solo una conoscenza superficialissima (non sono un guru, sono uno di quei pericolosi amatori che pare che Apple e chi per essa cerchino di "tenere fuori dal giro").

Insomma, chi ha bisogno di un linguaggio ad alto livello quando il C++ può essere sia a basso livello, sia ad alto livello (con tutte le sfumature intermedie)? Eppure... vedremo un giorno non lontano proporre da chi gestisce gli standard un superamento del C e del C++? Con "superamento" intendo: li vedremo sostituire con qualcosa che renderà in breve obsolete le conoscenze acquisite? Sarebbe un'idiozia difficile da comprendere. Più probabilmente una manovra.

Oh, magari sono solo un complottista, nè! Però non credo che la continua introduzione di nuovi linguaggi (e soprattutto l'abbandono di quelli "vecchi") sia una cosa costruttiva.

Ultima modifica effettuata da il 05/06/2014 alle 14:17
PM Quote
Avatar
R0gerBlack (Member)
Expert


Messaggi: 210
Iscritto: 10/06/2010

Segnala al moderatore
Postato alle 14:22
Giovedì, 05/06/2014
Testo quotato

Se vogliamo continuare sul percorso dei tipi, siamo sicuri che omettere l'obbligo di dichiarazione del tipo sia una buona idea? Non solo dal punto di vista del compilatore ma anche da quello del programmatore che con una forte tipizzazione è meno portato ad errori che si possono definire "stupidi".



In realtà anche se ti può sembrare un paradosso, lo Swift è un linguaggio fortemente tipizzato, mentre l'Obj-C debolmente. Questo perché l'Objective-C è un derivato completo del C (e non come il C++), mentre lo Swift essendo nuovo non ha uno standard su cui adattarsi.
è vero che è possibile omettere il tipo delle variabili, ma si è ben lontani dal PHP.

Non ho ancora provato a programmare in Swift, ma dubito fortemente che dichiarando (implicitamente) una variabile di tipo int la si possa utilizzare come stringa (come in PHP).

Un'altra cosa che mi sorprende sono i Tuples (valori multipli in un valore composto)

Codice sorgente - presumibilmente Tutto e di +

  1. let http404Error = (404, "Not Found")
  2. // http404Error è di tipo (Int, String), ed è uguale a (404, "Not Found")



Per estrarre i valori basta fare

Codice sorgente - presumibilmente Delphi

  1. let (statusCode, statusMessage) = http404Error
  2. println("The status code is \(statusCode)") // prints "The status code is 404"
  3. println("The status message is \(statusMessage)") // prints "The status message is Not Found"



Per estrarne solo uno è possibile omettere l'altro con un simbolo underscore (_)
Codice sorgente - presumibilmente Tutto e di +

  1. let (statusCode, _) = http404Error



Alternativamente è possibile estrarre i valori con un punto e l'indice

Codice sorgente - presumibilmente Delphi

  1. println("The status code is \(http404Error.0)")
  2. // prints "The status code is 404"
  3. println("The status message is \(http404Error.1)")
  4. // prints "The status message is Not Found"



Infine è possibile usare un indice letterale
Codice sorgente - presumibilmente Delphi

  1. let http200Status = (statusCode: 200, description: "OK")
  2. println("The status code is \(http200Status.statusCode)")
  3. // prints "The status code is 200"
  4. println("The status message is \(http200Status.description)")
  5. // prints "The status message is OK"



La prima domanda che viene in mente è: A cosa servono?
Sono stati pensati principalmente per la possibilità di restituire un valore multiplo in una funzione, anziché restituire un array o un altro tipo di struttura dati (e non ditemi che non l'avete mai voluto fare).

Se vi interessa approfondire riguardo i Tuples: https://developer.apple.com/library/prerelease/ios/document ...

Quanto ora ai pensieri "morali" sulla scelta di creare un linguaggio del genere:
Sinceramente non ne sono molto deluso. è effettivamente strano troncare l'utilizzo di un linguaggio come l'Objective-C in.. questo, ma secondo me la Apple l'ha fatto nel modo giusto (per esempio mantenendolo di basso livello).
Modificare un linguaggio molto conosciuto e utilizzato è costoso. Tutti quelli che ci programmano sanno come funziona (non parlo della totalità ma in generale) e le sue caratteristiche. Per ogni modifica apportata ogni programmatore dovrebbe venire portato a conoscenza delle modifiche.
Crearne uno nuovo da 0 è più semplice. Si possono definire le regole a proprio piacimento perché nessuno conosce il linguaggio e quando lo si presenta la gente lo può accettare così com'è.
In più ha una totale retrocompatibilità con Objective-C e C quindi utilizzarlo non può essere molto svantaggioso.
L'Obj-C non si può negare che abbia una sintassi decisamente ostica per gli amanti del C-like o peggio, di altri linguaggi, mentre lo Swift è chiaro fin da subito. Gli amanti dell'Obj-C potranno sempre utilizzarlo.

Codice sorgente - presumibilmente Plain Text

  1. // Objective-C
  2. -(void) foo {
  3. }
  4.  
  5. -(void) bar {
  6. [self foo]; // Chiama la funzione foo
  7. }



EDIT: AldoBaldo, ci sono parecchi motivi per cui si creano nuovi linguaggi di programmazione, che ho potuto apprendere nel mio studio primordiale dei compilatori. Nessuno ti obbliga a cambiare linguaggio e comunque è difficile che linguaggi come il C/C++ perdano importanza facilmente.

Ultima modifica effettuata da R0gerBlack il 05/06/2014 alle 14:25
PM Quote
Avatar
ZioCrocifisso (Member)
Pro


Messaggi: 135
Iscritto: 06/03/2013

Segnala al moderatore
Postato alle 14:57
Giovedì, 05/06/2014
Testo quotato

let (statusCode, _) = http404Error


Si chiama pattern matching, ed esiste da millenni nella programmazione funzionale.
Secondo me, il danno nel creare sempre nuovi linguaggi e pubblicizzarli sono le differenze tra i programmatori, che difficilmente potranno collaborare, riutilizzare del codice, ecc.
Andrebbero creati soltanto linguaggi avanzati con molte differenze rispetto agli altri, non linguaggi che ne hanno uno di base e aggiungono 4 cose prese da altri. Inoltre, sono contrario al forzare l'utilizzo di un certo linguaggio, ed è quello che fanno già e che vorranno continuare a fare con Swift.

Testo quotato

In ultimo vorrei aggiungere che la programmazione ad oggetti dovrebbe essere ormai standard, non starci molto a girare su se si può o non si può usare, in un linguaggio deve esserci ed essere usata, parere mio se volete scannatemi XD


Proprio perché è un parere tuo non puoi pretendere che diventi lo standard, che dovrebbe essere una cosa oggettivamente corretta e approvata da tutti. Specialmente nell'ambito Linux, ci sono moltissimi programmatori di C che non hanno nessuna intenzione di passare a C++ o a qualunque altro linguaggio OOP, perché la pensano diversamente. E inoltre non esiste soltanto la programmazione imperativa. Io ormai sono passato alla programmazione funzionale (e no, non esiste solo Scheme, che è vecchio), che ritengo di gran lunga più avanzata rispetto a qualunque altro linguaggio OOP, e i motivi per cui la gente preferisce programmare con questi è che sono già famosi, sono promossi commercialmente e sono più facili da imparare. In passato ho programmato in vari linguaggi OOP (C#, Java, PHP, C++, ecc.), poi sono passato al C, e infine anche ad Haskell (e adesso sto provando altri linguaggi sperimentali derivati da Haskell), senza abbandonare del tutto C, che è più adatto per programmi che devono essere il più efficienti possibile.

PM Quote
Pagine: [ 1 2 3 ] Precedente | Prossimo