Jeg har tilmeldt mig den intense computerprogrammeringsbootcamp, Maker Academy, i næste måned. For at få et forspring tænkte jeg, at jeg ville arbejde mig igennem Zed Shaws bog Learn Ruby the Hard Way.

Øvelse 25 ser ud til at teste mine problemløsningsevner, så jeg tænkte, at jeg ville skrive et indlæg, hvor jeg dokumenterer, hvordan jeg arbejdede ud og derefter rettede mine fejlmeddelelser. Dette indlæg er rettet mod nybegyndere i programmeringsverdenen, da jeg forestiller mig, at det er meget grundlæggende ting, som jeg får forkert.

Dette var mit første forsøg på at skrive øvelse 25’s script i min editor:

Når jeg kørte dette i terminalen fik jeg følgende fejlmeddelelse:

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

Det første jeg gjorde var at google fejlmeddelelsen.

Løsning af fejlmeddelelsen med Google

Jeg fandt et svar på Stackoverflow.

Det fortalte mig, at jeg ved et uheld skrev Alt + Space på min Mac, hvilket derfor skabte ikke-brydende mellemrum. Dette betragtes af Ruby som en del af et variablenavn i modsætning til det mellemrum, som det var meningen.

Det gav to løsninger på dette problem:

1. Omskrivning af Alt + Space til mellemrum for at forhindre, at denne slåfejl opstår igen.

2. Fremhævning af usynlige tegn i teksteditor for straks at indse slåfejlene.

Den syntes at foretrække løsning 2, så jeg tænkte, at jeg ville prøve denne måde først. Det virkede som den mest enkle og hurtige at løse. Jeg ville udelukke, at der var tale om et off-the-shelf-problem til min ødelagte kode.

Highlight invisible characters in my text editor – Part 1

Næste gang googlede jeg, hvordan man fremhæver usynlige tegn med min teksteditor, Sublime Text editor 2.

Det viser sig, at dette skulle være en standardfunktion i min teksteditor.

Hver gang jeg fremhæver tekst, skal jeg angiveligt kunne se små hvide prikker som på billedet nedenfor (se godt efter, de er der i de tomme felter):

Så jeg fremhævede teksten, og der skete ikke noget:

Jeg besluttede at parkere problemet med “ikke-brydende” mellemrum her for nu og forsøge at løse min fejlmeddelelse på en lettere måde. Jeg er relativt ny til kodning, så den næste løsning til at finde ‘ikke-brydende’ mellemrum; at rette præferencerne eller standardtasternes tildeling i Sublime Text editor, virkede ikke som den nemmeste måde at løse mit problem på.

Google selve øvelsen

Den næste ting jeg gjorde var at google ‘Ex25 learn Ruby the hard way’ for at se, om andre havde de samme problemer som jeg havde. Jeg fandt en blog med øvelsen indtastet. Jeg sammenlignede vores filer ord for ord på min skærm.

Jeg kunne ikke SE nogen forskel mellem vores filer (hvilket indikerer, at de skjulte ikke-brydende mellemrum kan være det, der forårsager min fejl).

Jeg havde dog brug for at udelukke, at der var en skrivefejl, som jeg ikke kunne få øje på et sted, så jeg skrev hele filen ud igen. Jeg regnede med, at dette var en hurtigere måde at komme til løsningen på.

Min anden fil virkede, da jeg kørte den i terminalen. Ingen fejlmeddelelse.

Her er den anden fil:

Jeg var nysgerrig på, hvor jeg gik galt med den første fil stadigvæk, så jeg sammenlignede dem linje for linje.

Sammenligning af det fungerende script med det med en fejlmeddelelse

Sammenlignede dem på min skærm og bemærkede to forskelle, som jeg rettede en ad gangen.

1. Når de tidligere funktioner blev kaldt i senere funktioner f.eks.

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

Funktionen ex25.break_word så ud som om den ikke var blevet genkendt i fejlskriften (den til højre), mens Ex25. fremstod blå i den anden skrift (til venstre).

Den mest indlysende grund, jeg kunne komme på, var, at “e” ikke var skrevet med stort. Så jeg ændrede alle Ex25’erne i det ødelagte script til et stort e.

Jeg kørte scriptet, men fik stadig den samme fejlmeddelelse:

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

2. Den næste nemme rettelse jeg bemærkede var, at filnavnet og funktionsnavnet i det ødelagte script var det samme, men i mit nye script havde jeg navngivet filen EX25b.rb.

Måske var det denne forskel i navngivningen, der var skyld i fejlen?

Nej ..

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

Hvis jeg havde læst hele øvelsen i Learning Ruby the Hard Way ville jeg have set, at dette ikke var svaret:

“Ex25-modulet behøver ikke at ligge i en fil med navnet ex25.rb. Prøv at lægge det i en ny fil med et tilfældigt navn, og importer derefter den fil og se, hvordan du stadig har Ex25 til rådighed.”

Så jeg besluttede mig for at gå tilbage til den første løsning, ikke-brydende mellemrum, da jeg nu havde udtømt de nemme muligheder og ikke for mit liv kunne se nogen forskel mellem fejlen og det korrekte script.

Highlight usynlige tegn i min tekst editor- Del 2

Jeg læste hvordan man gør dette her.

1. Åbn ‘præferencer’ i Sublime text editor & vælg ‘key bindings’.

2. Indsæt følgende kode i venstre side, fanen “user”, på fanen “user”:

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

3. Gemte og genåbnede derefter den oprindelige (ødelagte 🙁 ) fil.

Sikkert nok var der det utilsigtede Alt og mellemrumstasten ikke-brydende mellemrum:

HALLELUJAH .. jeg tænkte.. Jeg har endelig rettet mit gamle script…….

Jeg kørte det igen, og jeg havde STADIG den samme fejlmeddelelse!

Her er der hvor jeg nok skulle have tænkt:

“Jeg fik det rigtigt en gang og formåede at arbejde mig igennem øvelsen og gennemføre den. Jeg vil bare kalde det en dag og ikke bekymre mig om den fil, der returnerer en fejlmeddelelse”.

Men jeg er for nysgerrig/stædig til at nøjes med at lade fejlen hænge over mit første script.

Jeg kørte irb i terminalen.

Jeg kørte den fil jeg havde fået korrekt igen & filen med fejlmeddelelsen:

Jeg prøvede at finde ud af hvad forskellen var mellem de to filer.

Måske var det mapperne, de var gemt i?

Jeg tjekkede, og ganske rigtigt var de gemt i forskellige mapper.

Så jeg gemte fejlfilen i samme mappe som den fil, der virkede…. STILL the error message!!

Jeg kunne ikke se nogen anden forskel, så jeg ….

Kopierede og indsatte teksten fra den fungerende fil til fejlfilen.

Så skete der noget forfærdeligt!

BENGE filer holdt op med at virke!!!!

Den samme fejlmeddelelse dukkede op for den første fil, og nu returnerede arbejdsfilen ‘false’, når jeg ‘krævede’ den med irb:

Mulig årsag til dette problem:

Tå mange filer med samme eller lignende navn i samme mappe?

Jeg slettede alle undtagen én… Og som ved magi ..

DET VIRKEDE !!!

Jeg kørte arbejdsscriptet for Ex25 i terminalen og fulgte instruktionerne om, hvordan man bruger irb til at kalde dets funktioner.

Her er mine resultater og min forklaring på, hvad der sker:

Det korrekte script for Ex25

Kørsel af scriptet i kommandolinjen ‘irb’

Jeg har mærket de punkter, hvor jeg måtte tænke lidt over, hvordan det virkede. Her er min forklaring:

1. Udskriver ‘wait’, fordi funktionen virker på arrayet ‘words’, som ikke er sorteret. Det sorterede array hedder ‘sorted_words’.

2. ‘Words’ arrayet har fået forskudt den første og sidste (“all” og “wait” ) værdi væk i printfunktionen.

3. Kalder på ‘sorted_words’ arrayet, ikke på ‘words’ arrayet, som har de manglende værdier. Derfor er ‘all’ stadigvæk i arrayet.

4….Som om der mangler noget i billedet … Så jeg vurderede klart, at det var irrelevant dengang, derfor vil jeg gøre det samme igen nu..

5. Ved at bruge den oprindelige “sentence”-variabel og sende denne gennem funktionen. Den opdeler denne sætningsvariabel i et array, hver gang den støder på et mellemrum. Derefter bruger den funktionen Ex25.sort_words til at sortere dette array af ord.

6. Den tager den oprindelige variabel ‘sentence’, bryder den op i et array af ord og udskriver derefter den første og sidste værdi i dette array.

Så er vi nu kommet til slutningen af min kamp med øvelse 25 i Learn Ruby the Hard way. Jeg håber, at du har nydt og fundet min higgledy piggldy problemløsning nyttig, som til sidst resulterede i, at jeg overvandt de fejlmeddelelser, der blev givet ved at køre mit script. Kontakt mig endelig, hvis du ved et lille tilfælde læser dette & har brug for hjælp til at forstå det.

Nyd det, 🙂

Dette indlæg blev oprindeligt offentliggjort HER.

Articles

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.