{"id":6817,"date":"2011-04-28T16:53:37","date_gmt":"2011-04-28T14:53:37","guid":{"rendered":"http:\/\/www.devapp.it\/wordpress\/?p=6817"},"modified":"2011-04-28T16:53:37","modified_gmt":"2011-04-28T14:53:37","slug":"xcode-4-scopriamo-che-cosa-sono-gli-snippet-e-come-possiamo-usarli-in-modo-efficace","status":"publish","type":"post","link":"https:\/\/www.devapp.it\/wordpress\/xcode-4-scopriamo-che-cosa-sono-gli-snippet-e-come-possiamo-usarli-in-modo-efficace\/","title":{"rendered":"Xcode 4: scopriamo che cosa sono gli snippet e come possiamo usarli in modo efficace"},"content":{"rendered":"<p><a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/04\/Xcode-4-devAPP-icona.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/04\/Xcode-4-devAPP-icona.png\" alt=\"Xcode-4-devAPP-icona\" title=\"Xcode-4-devAPP-icona\" width=\"175\" height=\"175\" class=\"alignleft size-full wp-image-6636\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/04\/Xcode-4-devAPP-icona.png 175w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/04\/Xcode-4-devAPP-icona-150x150.png 150w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/04\/Xcode-4-devAPP-icona-92x92.png 92w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/04\/Xcode-4-devAPP-icona-64x64.png 64w\" sizes=\"auto, (max-width: 175px) 100vw, 175px\" \/><\/a> Come promesso eccoci con una nuova puntata dedicata ad XCode 4, oggi parliamo degli snippet, ma cosa sono esattamente? Gli snippet non sono altro che frammenti riutilizzabili di codice sorgente. Hanno un&#8217;utilit\u00e0 molto &#8220;pratica&#8221;, perch\u00e9 ci permettono di non dover riscrivere codice noioso, dalla struttura relativamente fissa e su cui \u00e8 facile che sfuggano errori (in gergo si parla di codice boilerplate).<br \/>\nXcode 4 fornisce pieno supporto per gli snippet: possiamo utilizzare quelli che Apple ha gi\u00e0 creato per noi o aggiungerne di nuovi. E&#8217; importante conoscerli e padroneggiarli, perch\u00e9 sono molto efficaci per aumentare la produttivit\u00e0 e ridurre gli errori di distrazione. Vediamo come.<!--more--><\/p>\n<h4>Dove troviamo gli snippet in Xcode 4?<\/h4>\n<p>E&#8217; facile, dobbiamo semplicemente aprire l&#8217; &#8220;Utility area&#8221; e poi scegliere la &#8220;Code Snippet Library&#8221;!<\/p>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/04\/Xcode-4-gli-snippet-devapp-01.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/04\/Xcode-4-gli-snippet-devapp-01.jpg\" alt=\"Xcode-4-gli-snippet-devapp-01\" title=\"Xcode-4-gli-snippet-devapp-01\" width=\"292\" height=\"371\" class=\"aligncenter size-full wp-image-6818\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/04\/Xcode-4-gli-snippet-devapp-01.jpg 292w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/04\/Xcode-4-gli-snippet-devapp-01-236x300.jpg 236w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/04\/Xcode-4-gli-snippet-devapp-01-118x150.jpg 118w\" sizes=\"auto, (max-width: 292px) 100vw, 292px\" \/><\/a><br \/>\n<\/center><\/p>\n<p>Eccone alcuni tra la cinquantina che Apple ha gi\u00e0 creato per noi:<\/p>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/04\/Xcode-4-gli-snippet-devapp-02.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/04\/Xcode-4-gli-snippet-devapp-02.jpg\" alt=\"Xcode-4-gli-snippet-devapp-02\" title=\"Xcode-4-gli-snippet-devapp-02\" width=\"261\" height=\"493\" class=\"aligncenter size-full wp-image-6819\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/04\/Xcode-4-gli-snippet-devapp-02.jpg 261w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/04\/Xcode-4-gli-snippet-devapp-02-79x150.jpg 79w\" sizes=\"auto, (max-width: 261px) 100vw, 261px\" \/><\/a><br \/>\n<\/center><\/p>\n<p>Attraverso la barra di ricerca posta in basso possiamo fare rapidamente delle ricerche tra i tanti disponibili, cercando, ad esempio, solo quelli che hanno a che fare con Core Data:<\/p>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/04\/Xcode-4-gli-snippet-devapp-03.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/04\/Xcode-4-gli-snippet-devapp-03.jpg\" alt=\"Xcode-4-gli-snippet-devapp-03\" title=\"Xcode-4-gli-snippet-devapp-03\" width=\"262\" height=\"356\" class=\"aligncenter size-full wp-image-6820\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/04\/Xcode-4-gli-snippet-devapp-03.jpg 262w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/04\/Xcode-4-gli-snippet-devapp-03-220x300.jpg 220w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/04\/Xcode-4-gli-snippet-devapp-03-110x150.jpg 110w\" sizes=\"auto, (max-width: 262px) 100vw, 262px\" \/><\/a><br \/>\n<\/center><\/p>\n<p>Se ne selezioniamo uno, si aprir\u00e0 un popup che ci mostra il codice associato a quello snippet:<\/p>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/04\/Xcode-4-gli-snippet-devapp-04.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/04\/Xcode-4-gli-snippet-devapp-04.jpg\" alt=\"Xcode-4-gli-snippet-devapp-04\" title=\"Xcode-4-gli-snippet-devapp-04\" width=\"500\" height=\"283\" class=\"aligncenter size-full wp-image-6821\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/04\/Xcode-4-gli-snippet-devapp-04.jpg 500w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/04\/Xcode-4-gli-snippet-devapp-04-300x169.jpg 300w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/04\/Xcode-4-gli-snippet-devapp-04-150x84.jpg 150w\" sizes=\"auto, (max-width: 500px) 100vw, 500px\" \/><\/a><br \/>\n<\/center><\/p>\n<p>Come possiamo notare, ci sono delle sezioni marcate in modo particolare (nell&#8217;esempio &#8220;deallocations&#8221;), che non sono altro che dei placeholder che nel nostro caso specifico dovremo andare a sostituire opportunamente.<\/p>\n<h4>Come possiamo inserire gli snippet nel nostro codice?<\/h4>\n<p>Ci sono due modi: il primo, pi\u00f9 intuitivo, consiste semplicemente nel trascinare lo snippet dalla &#8220;Code Snippet Library&#8221; al nostro codice.<\/p>\n<p>Il secondo, pi\u00f9 rapido, consiste nello sfruttare la funzionalit\u00e0 di autocompletamento del codice. Ad esempio, se cominciamo a scrivere <strong>dealloc<\/strong> nel blocco @implementation di una classe, potremo scegliere l&#8217; &#8220;Objective C dealloc method&#8221; (che \u00e8 appunto uno snippet, come evidenziato dall&#8217;icona {} a sinistra):<\/p>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/04\/Xcode-4-gli-snippet-devapp-05.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/04\/Xcode-4-gli-snippet-devapp-05.jpg\" alt=\"Xcode-4-gli-snippet-devapp-05\" title=\"Xcode-4-gli-snippet-devapp-05\" width=\"398\" height=\"160\" class=\"aligncenter size-full wp-image-6822\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/04\/Xcode-4-gli-snippet-devapp-05.jpg 398w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/04\/Xcode-4-gli-snippet-devapp-05-300x120.jpg 300w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/04\/Xcode-4-gli-snippet-devapp-05-150x60.jpg 150w\" sizes=\"auto, (max-width: 398px) 100vw, 398px\" \/><\/a><br \/>\n<\/center><\/p>\n<p>Premendo INVIO sulla tastiera verr\u00e0 inserito in automatico il codice dello snippet. Non solo: verr\u00e0 anche selezionato in automatico il primo dei parametri che dovremo rimpiazzare:<\/p>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/04\/Xcode-4-gli-snippet-devapp-06.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/04\/Xcode-4-gli-snippet-devapp-06.jpg\" alt=\"Xcode-4-gli-snippet-devapp-06\" title=\"Xcode-4-gli-snippet-devapp-06\" width=\"398\" height=\"160\" class=\"aligncenter size-full wp-image-6824\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/04\/Xcode-4-gli-snippet-devapp-06.jpg 398w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/04\/Xcode-4-gli-snippet-devapp-06-300x120.jpg 300w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/04\/Xcode-4-gli-snippet-devapp-06-150x60.jpg 150w\" sizes=\"auto, (max-width: 398px) 100vw, 398px\" \/><\/a><br \/>\n<\/center><\/p>\n<p>Davvero comodo, non \u00e8 vero? A questo punto, per\u00f2, probabilmente vi starete chiedendo: &#8220;ok, ma dove trovo la parola da usare per l&#8217;autocompletamento di un certo snippet?&#8221;. Facile: occorre aprire nuovamente il popup che mostra il codice dello snippet e premere sul bottone &#8220;edit&#8221;. Troviamo il testo da usare accanto a &#8220;completion shortcut&#8221;:<\/p>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/04\/Xcode-4-gli-snippet-devapp-07.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/04\/Xcode-4-gli-snippet-devapp-07.jpg\" alt=\"Xcode-4-gli-snippet-devapp-07\" title=\"Xcode-4-gli-snippet-devapp-07\" width=\"468\" height=\"318\" class=\"aligncenter size-full wp-image-6825\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/04\/Xcode-4-gli-snippet-devapp-07.jpg 468w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/04\/Xcode-4-gli-snippet-devapp-07-300x203.jpg 300w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/04\/Xcode-4-gli-snippet-devapp-07-150x101.jpg 150w\" sizes=\"auto, (max-width: 468px) 100vw, 468px\" \/><\/a><br \/>\n<\/center><\/p>\n<p>Un dettaglio: come possiamo notare dalla figura, ad uno snippet \u00e8 anche associato uno scope, cio\u00e8 un contesto in cui questo snippet &#8220;ha senso&#8221;. Nel caso della dealloc \u00e8 ovviamente il solo blocco @implementation di una classe. Ci\u00f2 significa che per lo snippet dealloc l&#8217;autocompletamento si attiver\u00e0 se e solo se ci troveremo in quello scope.<\/p>\n<h4>Possiamo creare e aggiungere uno snippet tutto nostro?<\/h4>\n<p>Certamente. E&#8217; sufficiente selezionare il codice nell&#8217;editor e trascinarlo nella &#8220;Code Snippet Library&#8221;. Operazione che, a dire il vero, inizialmente si rivela pi\u00f9 frustrante di quanto potrebbe apparire a prima vista. Ma per fortuna c&#8217;\u00e8 un trucco: una volta selezionato il codice, occorre premerci sopra con il mouse per circa un secondo, fino a che il cursore non diventa una freccia nera. A questo punto possiamo trascinare il codice senza problemi.<\/p>\n<p>Una volta trascinato il codice comparir\u00e0 questo popup, attraverso cui possiamo assegnare un nome allo snippet, una parola da usare per l&#8217;autocompletamento, un contesto di validit\u00e0 e qualche altro parametro:<\/p>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/04\/Xcode-4-gli-snippet-devapp-08.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/04\/Xcode-4-gli-snippet-devapp-08.jpg\" alt=\"Xcode-4-gli-snippet-devapp-08\" title=\"Xcode-4-gli-snippet-devapp-08\" width=\"500\" height=\"263\" class=\"aligncenter size-full wp-image-6823\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/04\/Xcode-4-gli-snippet-devapp-08.jpg 500w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/04\/Xcode-4-gli-snippet-devapp-08-300x157.jpg 300w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/04\/Xcode-4-gli-snippet-devapp-08-150x78.jpg 150w\" sizes=\"auto, (max-width: 500px) 100vw, 500px\" \/><\/a><br \/>\n<\/center><\/p>\n<p>Come possiamo notare, i nostri snippet vengono contrassegnati con un&#8217;icona particolare avente la scritta &#8220;user&#8221; in sovraimpressione.<\/p>\n<p>E&#8217; molto interessante il fatto che nei nostri snippet possiamo anche prevedere la presenza dei placeholder: \u00e8 sufficiente usare la sintassi <strong><#paramName#><\/strong>.<\/p>\n<h4>Possiamo trasferire i nostri snippet personali su un altro computer?<\/h4>\n<p>Certamente, anche se non esiste un modo comodo per farlo. Occorre portarsi nella directory <em>~\/Library\/Developer\/Xcode\/UserData\/CodeSnippets\/<\/em>, all&#8217;interno della quale troveremo un file <em>.plist<\/em> per ciascuno snippet. Non aspettatevi per\u00f2 dei nomi amichevoli, perch\u00e9 troveremo solo delle cose del tipo <em>CBA0922F-7714-404A-B3E2-6058F5CBD76D.codesnippet<\/em>.<\/p>\n<h4>L&#8217;autore<\/h4>\n<p>Valerio Dutto. Ingegnere informatico con oltre 5 anni di esperienza nella realizzazione di software professionali. Dal 2009 si occupa a tempo pieno di sviluppo su piattaforme iOS e Mac OS X. Ha contribuito a oltre 15 applicazioni iPhone e iPad, alcune delle quali hanno ricevuto importanti riconoscimenti. Il suo sito Web \u00e8 <a href=\"http:\/\/www.valeriodutto.com\" target=\"_blank\">http:\/\/www.valeriodutto.com<\/a>. <\/p>\n","protected":false},"excerpt":{"rendered":"<p>Come promesso eccoci con una nuova puntata dedicata ad XCode 4, oggi parliamo degli snippet, ma cosa&#8230;<\/p>\n","protected":false},"author":544,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[7],"tags":[413,727,696,697,242,698,695],"class_list":["post-6817","post","type-post","status-publish","format-standard","hentry","category-strumenti-di-sviluppo","tag-programmare-iphone","tag-snippet-xcode","tag-strumenti-di-sviluppo-apple","tag-sviluppatori-iphone","tag-tutorial-xcode","tag-valerio-dutto","tag-xcode-4"],"acf":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/6817","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/users\/544"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/comments?post=6817"}],"version-history":[{"count":2,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/6817\/revisions"}],"predecessor-version":[{"id":6827,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/6817\/revisions\/6827"}],"wp:attachment":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/media?parent=6817"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/categories?post=6817"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/tags?post=6817"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}