Il mese prossimo mi sono iscritto all’intenso bootcamp di programmazione informatica, la Maker Academy. Per iniziare ho pensato di lavorare sul libro Learn Ruby the Hard Way di Zed Shaw.

L’esercizio 25 sembra mettere alla prova le mie capacità di problem solving così ho pensato di scrivere un post che documenta come ho risolto i miei messaggi di errore. Questo post è rivolto ai neofiti del mondo della programmazione perché immagino che si tratti di cose molto basilari che sto sbagliando.

Questo era il mio primo tentativo di scrivere lo script dell’esercizio 25 nel mio editor:

Quando ho eseguito questo nel terminale ho ottenuto il seguente messaggio di errore:

ex25.rb:2:in `<main>': undefined local variable or method `ex25' for main:Object (NameError)

La prima cosa che ho fatto è stata cercare il messaggio di errore su Google.

Risolvere il messaggio di errore con Google

Ho trovato una risposta su Stackoverflow.

Mi ha detto che stavo accidentalmente digitando Alt + Space sul mio Mac, creando quindi uno spazio non interrotto. Questo è considerato da Ruby come parte di un nome di variabile in contrasto con lo spazio bianco che doveva essere.

Ha dato due soluzioni a questo problema:

1. Remapping Alt + Space to space to stop this typo occurring again.

2. Highlighting invisible characters in text editor to immediately realise the typos.

The preference seemed to be for solution 2 so I thought I would try this way first. Sembrava la più semplice e veloce da risolvere. Volevo escludere il problema dell’off-the-shelf al mio codice rotto.

Evidenzia i caratteri invisibili nel mio editor di testo – Parte 1

Poi ho cercato su Google come evidenziare i caratteri invisibili con il mio editor di testo, Sublime Text editor 2.

Si è scoperto che questa dovrebbe essere una caratteristica di default del mio editor di testo.

Ogni volta che evidenzio del testo dovrei essere in grado di vedere dei piccoli punti bianchi come l’immagine qui sotto (guarda da vicino, sono lì negli spazi vuoti):

Quindi ho evidenziato il testo e non è successo nulla:

Ho deciso di parcheggiare qui il problema degli spazi ‘non spezzati’ per ora e provare a risolvere il mio messaggio di errore in modo più semplice. Sono relativamente nuovo nel campo della codifica, quindi la prossima soluzione per trovare gli spazi non di interruzione; aggiustare le preferenze o le assegnazioni dei tasti di default nell’editor Sublime Text, non sembrava il modo più semplice per risolvere il mio problema.

Cercando su Google l’esercizio stesso

La prossima cosa che ho fatto è stata cercare su Google ‘Ex25 learn Ruby the hard way’ per vedere se qualcun altro stava avendo gli stessi problemi che avevo io. Ho trovato un blog con l’esercizio digitato. Ho confrontato i nostri file parola per parola sul mio schermo.

Non ho potuto VEDERE alcuna differenza tra i nostri file (indicando che gli spazi nascosti di non interruzione potrebbero essere la causa del mio errore).

Tuttavia avevo bisogno di escludere l’idea che ci fosse un errore di battitura che non potevo individuare da qualche parte, così ho digitato di nuovo l’intero file. Pensando che questo fosse un modo più veloce per arrivare alla soluzione.

Il mio secondo file ha funzionato quando l’ho eseguito nel terminale. Nessun messaggio di errore.

Ecco il secondo file:

Mi sono chiesto dove ho sbagliato con il primo file, così li ho confrontati riga per riga.

Confrontando lo script funzionante con quello con un messaggio di errore

Li ho confrontati sul mio schermo e ho notato due differenze che ho corretto una alla volta.

1. Quando le funzioni precedenti venivano chiamate in quelle successive, ad esempio

def ex25.print_first_and_last(sentence)
words = ex25.break_word .. etc

La funzione ex25.break_word sembrava non essere stata riconosciuta nello script di errore (quello a destra) mentre la Ex25. appariva blu nell’altro script (a sinistra).

La ragione più ovvia che mi veniva in mente era che la ‘e’ non era maiuscola. Così ho cambiato tutti gli Ex25 nello script rotto con una e maiuscola.

Ho eseguito lo script ma ho ancora lo stesso messaggio di errore:

ex25.rb:2:in `<main>': undefined local variable or method `ex25' for main:Object (NameError)

2. La prossima facile correzione che ho notato è stata il nome del file e il nome della funzione nello script rotto erano gli stessi, ma nel mio nuovo script avevo chiamato il file EX25b.rb.

Forse era questa differenza di nome che era responsabile dell’errore?

No..

ex25.rb:2:in `<main>': undefined local variable or method `ex25' for main:Object (NameError)

Se avessi letto l’intero esercizio in Learning Ruby the Hard Way avrei visto che questa non era la risposta:

“Il modulo Ex25 non deve essere in un file chiamato ex25.rb. Prova a metterlo in un nuovo file con un nome casuale, poi importa quel file e vedi come hai ancora Ex25 disponibile.”

Così ho deciso di tornare alla prima soluzione, lo spazio non interrotto, poiché avevo ormai esaurito le opzioni facili e non riuscivo a vedere alcuna differenza tra l’errore e lo script corretto.

Evidenzia i caratteri invisibili nel mio editor di testo – Parte 2

Ho letto come fare qui.

1. Aprire le ‘preferenze’ nell’editor di testo Sublime & selezionare ‘legami chiave’.

2. Inserire nella parte sinistra, la scheda ‘utente’ il seguente codice:

{
"keys": ,
"command": "insert_snippet",
"args": {"contents": " "}
}

3. Salvato poi riaperto il file originale (rotto 🙁 ).

Sicuramente c’era l’accidentale Alt e la barra spaziatrice non-breaking space:

HALLELUJAH .. ho pensato. Ho finalmente sistemato il mio vecchio script…….

L’ho eseguito di nuovo e ho avuto ancora lo stesso messaggio di errore!

Ecco dove probabilmente avrei dovuto pensare:

“L’ho corretto una volta e sono riuscito a lavorare attraverso l’esercizio e completarlo. Lo chiamerò semplicemente un giorno e non mi preoccuperò del file che sta restituendo un messaggio di errore”.

Ma sono troppo curioso / testardo per accontentarmi di lasciare che l’errore incomba sul mio primo script.

Ho eseguito irb nel terminale.

Ho eseguito di nuovo il file che avevo corretto &il file con il messaggio di errore:

Ho cercato di capire quale fosse la differenza tra i due file.

Forse erano le directory in cui erano stati salvati?

Controllo e di sicuro erano salvati in directory diverse.

Così ho salvato il file di errore nella stessa directory del file che funzionava…. Ancora il messaggio di errore!!!

Non potevo vedere altre differenze così ho ….

Copiato e incollato il testo dal file funzionante al file di errore.

Poi è successo qualcosa di terribile!

Entrambi i file hanno smesso di funzionare!!!!

Lo stesso messaggio di errore è apparso per il primo file e ora il file di lavoro restituiva ‘false’ quando lo ‘richiedevo’ con irb:

Possibile causa di questo problema:

Troppi file con lo stesso nome o simile nella stessa directory?

Ho cancellato tutti tranne uno… E come per magia ..

Ha funzionato!!!

Ho eseguito lo script di lavoro per Ex25 nel terminale e ho seguito le istruzioni su come usare irb per chiamare le sue funzioni.

Ecco i miei risultati e la mia spiegazione di ciò che succede:

Lo script corretto per Ex25

Eseguendo lo script in linea di comando ‘irb’

Ho etichettato i punti in cui ho dovuto pensare un po’ al funzionamento. Ecco la mia spiegazione:

1. Stampa ‘wait’ perché la funzione sta agendo sull’array ‘words’ che non è ordinato. L’array ordinato si chiama ‘sorted_words’.

2. L’array ‘Words’ ha i valori del primo e dell’ultimo (“all” e “wait”) spostati nella funzione di stampa.

3. Chiamata sull’array ‘sorted_words’, non sull’array ‘words’ che ha i valori mancanti. Quindi ‘all’ è ancora nell’array.

4….Sembra mancare nell’immagine … Quindi ho chiaramente ritenuto irrilevante allora quindi rifarò lo stesso ora..

5. Usando la variabile originale ‘sentence’ e passandola attraverso la funzione. Sta rompendo questa variabile frase in un array ogni volta che incontra uno spazio. Poi usa la funzione Ex25.sort_words per ordinare questo array di parole.

6. Prende la variabile originale ‘sentence’, la divide in un array di parole e poi stampa il primo e l’ultimo valore di questo array.

Così siamo arrivati alla fine della mia lotta con l’esercizio 25 di Learn Ruby the Hard way. Spero che vi sia piaciuto e che abbiate trovato utile la mia soluzione del problema “higgledy piggldy” che alla fine mi ha portato a battere i messaggi di errore dati dall’esecuzione del mio script. Vi prego di contattarmi se per caso state leggendo questo &avete bisogno di aiuto per capirlo.

Godetevi, 🙂

Questo post è stato originariamente pubblicato QUI.

Articles

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.