Certo che si può, ma risulta molto più complicato stare dietro a tutto.
Certo che si può, ma risulta molto più complicato stare dietro a tutto.
esatto
il problema che mi pongo nella programmazione, per cui non ne volevo sapere nulla e che mi ha portato a non lavorare per due/tre anni , era che devi tenere a mente tremila cose che non so gestire tutte e perdo le giornate intere senza risolvere, ed io che tengo alle cose a fine giornata sono distrutto e demoralizzato.
Io infatti nel primo post, volevo proprio chiedere di capire come bisogna ragionare riga di codice per riga di codice per poter programmare con una certa filosofia ("dividi et impera") e non perdermi in ragionamenti che non portano a nulla
questo però porta il discorso su un piano diverso, non solo allo sviluppo del codice ma alla progettazione
io ti dico come mi approccio io ad un problema, considera che sono un appassionato autodidatta:
- guardo attentamente all'obiettivo che si vuole ottenere
- verifico quali sono i dati in input al problema e alla loro struttura (il file di testo nel tuo caso)
- disegno mentalmente il flusso di lavoro
- scompongo il flusso di lavoro in parti definite
- progetto cosa deve fare ogni singola parte del codice guardando anche ai sistemi da utilizzare (DB, file di output, uso di dati in memoria, ecc) ed al riutilizzo del codice (creazione di oggetti o di funzioni)
- sviluppo le parti di codice in ordine di esecuzione (nel tuo caso, apertura del file, recupero dei dati, inserimento dei dati in una struttura più flessibile di quella originale, ecc)
- testo il codice parte per parte e lo risistemo per correggere i bug o efficientarlo
Ovviamente, ognuno ha il suo percorso di "produzione" ed esistono varie tecniche e processi strutturati da applicare (mi vengono in mente lo sviluppo AGILE, le tecniche MVC, il paradigma Test Driven Development e tanti altri)
Bravissimo.Permettimi di aggiungere l'ultimo tassello a quanto hai detto ovvero ricercare gli effetti collaterali. Ovvero prevenire "input" indesiderati che possono compromettere il normale funzionamento del codice. In altre parole validare opportunamente l'input implementando una adeguata gestione degli errori.
grazie ragazzi per i vostri interventi.
Penso che questa parte del ragionamento è da affinare, per riuscire bene a fare cose e non perdersi
Con questo problema io ho pensato inizialmente che il programma apre il file ed esegue il ciclo while, ad ogni ciclo si chiama la funzione che apre anche'essa lo stesso file.- disegno mentalmente il flusso di lavoro
- scompongo il flusso di lavoro in parti definite
- progetto cosa deve fare ogni singola parte del codice guardando anche ai sistemi da utilizzare (DB, file di output, uso di dati in memoria, ecc) ed al riutilizzo del codice (creazione di oggetti o di funzioni)
all'inizio non ragionando immaginavo che sia il programma che la funzione leggessero lo stesso indirizzo e quindi dovevo fare in modo da memorizzare i vecchi indirizzi per poterli confrontare. Poi ho ragionato sul fatto che la funzione con il suo ciclo while non leggeva lo stesso indirizzo, mi sono inventato dei contatori per memorrizzare tre indirizzi diversi....insomma un sacco di cose che non hanno portato a nulla.
Fra alcuni giorni cmq mi metto a ragionare sull'ultimo codice che mi è stato proposto e lo studio ben bene, in modo da ricavare anche un modo di ragionare per questa fase della progettazione del codice.
Intanto vi auguro buon fine settima e buon ferragosto a tutti.
Da ieri mi sono fermato con lo studio, ripartirò fra alcuni gg. Non faccio vacanze, ma sto studiando da tanto tempo e vorrei fermarmi un pochino.
ciaociao
Anche se mi reputo ancora in vacanza, perchè non sto tutto il giorno a studiare, sono riuscito ad avere qualche oretta e ragionare sul problerma.
Considerando l'ultimo codice di Alhazred ed in particolare questo pezzo di codice
l'ho tradotto così:codice:array_key_exists($ip, ${'pulsante_'.$cliccato}) ? ${'pulsante_'.$cliccato}[$ip] += 1 : ${'pulsante_'.$cliccato}[$ip] = 1;
codice:if(array_key_exists($indirizzo, ${'sul_pulsante_'.$click})){ ${'sul_pulsante_'.$click}[$indirizzo] = ${'sul_pulsante_'.$click}[$indirizzo]+1 ; }else{ ${'sul_pulsante_'.$click}[$indirizzo] = 1; }
quindi prima di ? è come se ci fosse una domanda, ciò che viene dopo è la risposta
affermativa e poi la risposta negativa separata da :
quindi se esiste l'indirizzo nell'array un indice pari all'indirizzo, aggiungici 1 a quel
particolare elemento dell'array
se non esiste, mettilo nell'array e dacci valore 1
Corretto?
Nel primissimo ciclo, quando non ci sono elementi negli array
con questo assegnamentoquindi vado ad inserirecodice:${'sul_pulsante_'.$click}[$indirizzo] = 1
nell'array sia la chiave ($indirizzo]) che il valore (1)?
giusto?
come si può usare la variabile variabile nelle espressioni echo ?
così
codice:echo" se è presente allora aggiunge 1 all'elemento nell'array $sul_pulsante_.$click ";
non funziona
se è così nemmeno
codice:echo" se è presente allora aggiunge 1 all'elemento nell'array ${'sul_pulsante_'.$click} ";
Ultima modifica di Alfoxx; 17-08-2016 a 16:02
mi sono reso conto solo adesso che poichè ho rifatto il programma può sembrare che quelle variabili che ho scritto nel messaggio precedente non dipendono da nulla.
Il codice che ho scritto io è
Quindi il codice di Alhazredcodice:$sul_pulsante_p1=array(); //definisco due array $sul_pulsante_p2=array(); $clicktotali=0; //contatore dei click totali ricevuti dai due indirizzi $textfile = fopen("test.txt", "r"); //apro il file da contare while ( $rigafile=fgets($textfile,1024) ) { $campiriga = explode("|", $rigafile); //estraggo tutti i campi di riga $click=$campiriga[0]; //prelevo da ogni riga il campo relativo al click $indirizzo=$campiriga[2]; //prelevo da ogni riga il campo relativo all'indirizzo $clicktotali++;
l'ho trasformato cosìcodice:array_key_exists($ip, ${'pulsante_'.$cliccato}) ? ${'pulsante_'.$cliccato}[$ip] += 1 : ${'pulsante_'.$cliccato}[$ip] = 1;
ovviamente rimangono le domande di primacodice:if(array_key_exists($indirizzo, ${'sul_pulsante_'.$click})){ ${'sul_pulsante_'.$click}[$indirizzo] = ${'sul_pulsante_'.$click}[$indirizzo]+1 ; }else{ ${'sul_pulsante_'.$click}[$indirizzo] = 1; }