{"id":229978,"date":"2022-11-09T14:37:00","date_gmt":"2022-11-09T11:37:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=229978"},"modified":"2022-11-09T19:32:56","modified_gmt":"2022-11-09T16:32:56","slug":"quali-sono-gli-effetti-collaterali-della-programmazione-comunque","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/it\/quali-sono-gli-effetti-collaterali-della-programmazione-comunque\/","title":{"rendered":"Quali sono gli effetti collaterali della programmazione, comunque?"},"content":{"rendered":"\n<p>Ogni volta che parliamo di determinati concetti di programmazione, penso che sia importante fare un passo indietro rispetto alle specifiche di cui stiamo discutendo e guardare le cose nel contesto del quadro pi\u00f9 ampio.<\/p>\n<p>Alcuni moduli introducono effetti collaterali; alcuni no. Va bene.<\/p>\n<p>Ad esempio, <a href=\"https:\/\/wordpress.mediadoma.com\/it\/standard-di-codifica-di-base-tramite-psr-1\/\" title=\"ieri\" >ieri<\/a> ho accennato brevemente all&#8217;idea di programmare gli effetti collaterali, ma l&#8217;ho fatto parlando dell&#8217;utilizzo dei PSR. E per coloro che sono semplicemente interessati agli aspetti della programmazione in senso pi\u00f9 generale, \u00e8 importante anche capirli.<\/p>\n<p>Ricorda, l&#8217;idea degli effetti collaterali <a href=\"http:\/\/www.php-fig.org\/psr\/psr-1\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">come indicato in PSR-1<\/a> \u00e8:<\/p>\n<blockquote>\n<p>Un file DOVREBBE dichiarare nuovi simboli (classi, funzioni, costanti, ecc.) e non causare altri effetti collaterali, oppure DOVREBBE eseguire la logica con effetti collaterali, ma NON DOVREBBE fare entrambi.<\/p>\n<\/blockquote>\n<p>In questo post, non sono cos\u00ec interessato a discutere di logica con effetti collaterali (perch\u00e9 ci sono momenti in cui si verificheranno effetti collaterali). Invece, sono pi\u00f9 interessato a comprendere gli effetti collaterali della programmazione (cosa sono, cosa evitare e cos\u00ec via).<\/p>\n<p>Dopotutto, parlare di effetti collaterali in un contesto pu\u00f2 significare una cosa mentre, nella programmazione, pu\u00f2 significarne un&#8217;altra.<\/p>\n<h2>Programmazione degli effetti collaterali<\/h2>\n<p>Ok, quindi l&#8217;intera idea o definizione di un effetto collaterale generico \u00e8 semplice, <a href=\"https:\/\/d.pr\/Jyf2Np\" class=\"external external_icon\" rel=\"nofollow\" target=\"_blank\">giusto<\/a>? <\/p>\n<blockquote>\n<p>un effetto secondario, tipicamente indesiderabile di un farmaco o di un trattamento medico.<\/p>\n<\/blockquote>\n<p>Elimina l&#8217;intero aspetto del trattamento e ti rimane un &quot;effetto secondario, &#8230; indesiderabile&quot;. Ok, ecco la parte potenzialmente confusa:<\/p>\n<ul>\n<li>scegliamo di includere un file,<\/li>\n<li>sappiamo cosa fa il file,<\/li>\n<li>quindi, se sappiamo cosa stiamo <a href=\"https:\/\/php.net\/manual\/en\/function.include-once.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">includendo<\/a> e cosa fa, come pu\u00f2 introdurre qualcosa di indesiderabile?<\/li>\n<\/ul>\n<p>Almeno, \u00e8 cos\u00ec che spesso mi viene chiesto quando si tratta di parlare di effetti collaterali. Nella programmazione, ho sempre generalizzato gli effetti collaterali come qualsiasi cosa che alteri lo stato del programma.<\/p>\n<p>Abbastanza facile, giusto?<\/p>\n<h3>Effetti collaterali in WordPress<\/h3>\n<p>Quindi supponiamo che tu stia lavorando con WordPress, perch\u00e9 \u00e8 quello che faccio <a href=\"https:\/\/tommcfarlin.com\/tag\/wordpress\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">e di cui scrivo<\/a> \ud83d\ude42, e abbiamo un file che \u00e8 responsabile dell&#8217;aggiunta di una voce di sottomenu a uno dei menu di primo livello esistenti.<\/p>\n<p>Quella classe potrebbe essere relativamente semplice in quanto avvolge <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/add_submenu_page\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">la corretta chiamata API di WordPress<\/a>, si attiva quando \u00e8 collegata all&#8217;hook [corretto] e quindi aggiunge il sottomenu, come previsto.<\/p>\n<p>Ma diciamo o quella classe, un metodo nella classe, o includendo un file che quella classe aggiunge anche alcuni JavaScript o stili che alterano lo stato della voce del sottomenu in modo tale che sia evidenziato, si comporti come se fosse stato &quot;cliccato&quot; oppure fa qualcosa che il programma o l&#8217;utente non intendono.<\/p>\n<p>Questo sarebbe un effetto collaterale in quanto cambia lo stato del programma.<\/p>\n<h2>Cosa dovrebbe fare il modulo?<\/h2>\n<p>Quella classe stessa dovrebbe fare <a href=\"https:\/\/en.wikipedia.org\/wiki\/Single_responsibility_principle\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">una cosa<\/a> :<\/p>\n<blockquote>\n<p>Il principio della responsabilit\u00e0 unica \u00e8 un principio di programmazione del computer che afferma che ogni modulo o classe dovrebbe avere la responsabilit\u00e0 su una singola parte della funzionalit\u00e0 fornita dal software e che la responsabilit\u00e0 dovrebbe essere interamente incapsulata dalla classe.<\/p>\n<\/blockquote>\n<p>Ma quando introduciamo qualcosa che si aggiunge a quello che dovrebbe fare \u2013 quando aggiungiamo alla sua responsabilit\u00e0 o cambiamo l&#8217;unica cosa fondamentale che fa \u2013 allora abbiamo introdotto un effetto collaterale.<\/p>\n<p>Ricorda, questo non \u00e8 intrinsecamente negativo (secondo la definizione PSR-1 sopra), ma \u00e8 importante riconoscere quando lo stiamo facendo e quando non lo siamo.<\/p>\n<h2>Quindi, come aggiungiamo funzionalit\u00e0?<\/h2>\n<p>Penso che la domanda naturale sia che se vogliamo aggiungere funzionalit\u00e0 a un programma che ne altera lo stato, come lo facciamo (ed \u00e8 sbagliato)?<\/p>\n<p>Primo, no, non \u00e8 sbagliato. Voglio dire, i programmi hanno stati diversi in base a una variet\u00e0 di cose, giusto? A volte succede quando qualcosa viene scritto su disco o database; a volte succede quando l&#8217;utente fa clic su un elemento dell&#8217;interfaccia utente e cos\u00ec via.<\/p>\n<p>Ma come si verificano questi stati \u00e8 dove entra in gioco la natura degli effetti collaterali.<\/p>\n<p>Prendiamo ad esempio l&#8217;idea di un sottomenu. Dovrebbe fare una cosa. Non dovrebbe alterare nient&#8217;altro che ci\u00f2 che vediamo sullo schermo.<\/p>\n<ul>\n<li>Non dovrebbe scrivere nel database,<\/li>\n<li>Non dovrebbe impostare un listener di eventi per quando un altro oggetto aggiunge un sottomenu,<\/li>\n<li>Non dovrebbe alterare la presentazione di nulla al di fuori di se stesso.<\/li>\n<li>E cos\u00ec via.<\/li>\n<\/ul>\n<p>L&#8217;aggiunta di funzionalit\u00e0 funziona allo stesso modo: introduci classi che sono responsabili di fare una cosa specifica e lasci che lo facciano. Quando questi componenti lavorano insieme, allora hai un programma funzionale in cui ogni modulo (classe\/funzione\/qualunque cosa) rimane nella sua corsia, per cos\u00ec dire.<\/p>\n<h2>Che cos&#8217;\u00e8 una regola pratica?<\/h2>\n<p>Sono sicuro che molti di voi leggendo questo hanno la vostra opinione su quali sono gli effetti collaterali e cosa non lo sono. E come te, ho il mio.<\/p>\n<p>Pensare in questo modo:<\/p>\n<p>Se chiami un metodo e restituisce un valore, quindi chiami di nuovo un metodo con lo stesso set di dati, dovrebbe restituire lo stesso valore.<\/p>\n<p>\u00c8 cos\u00ec che sai che la tua funzione, classe o modulo generico non ha effetti collaterali.<\/p>\n<p>E, come per qualsiasi cosa, ho commesso questi errori (e probabilmente continuer\u00f2) ma si tratta di cercare di migliorare nel non farlo.<\/p>\n<p>Alla fine, diventer\u00e0 la nuova normalit\u00e0.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fonte di registrazione:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>In precedenza ho discusso degli effetti collaterali della programmazione nel contesto di PSR-1. Ma la loro importanza si estende oltre un singolo linguaggio e nella programmazione generale.<\/p>\n","protected":false},"author":1,"featured_media":223973,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[896,720],"tags":[1168],"class_list":["post-229978","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-codice","category-sviluppatore","tag-affiai-it"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/229978","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/comments?post=229978"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/229978\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media\/223973"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media?parent=229978"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/categories?post=229978"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/tags?post=229978"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}