Eu inscrevi-me no intenso bootcamp de programação de computadores, a Maker Academy, no próximo mês. Para começar, eu pensei que iria trabalhar através do livro de Zed Shaw’s Learn Ruby the Hard Way.

Exercise 25 parece estar testando minhas habilidades de resolução de problemas, então eu pensei em escrever um post documentando como eu trabalhei e então corrigi minhas mensagens de erro. Este post é direcionado a novatos no mundo da programação, pois imagino que sejam coisas muito básicas que eu estou errando.

Esta foi a minha primeira tentativa de escrever o script do exercício 25 no meu editor:

>

>

>

>

>

Quando corri isto no terminal recebi a seguinte mensagem de erro:

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

A primeira coisa que fiz foi pesquisar a mensagem de erro no Google.

Solvendo a mensagem de erro com o Google

E encontrei uma resposta no Stackoverflow.

Disse-me que estava acidentalmente a digitar Alt + Espaço no meu Mac, criando assim um espaço não quebrado. Isto é considerado pelo Ruby como parte de um nome de variável ao contrário do espaço em branco que se pretendia que fosse.

Deu duas soluções a este problema:

1. Remaptando Alt + Espaço para o espaço para impedir que este erro de digitação ocorra novamente.

2. Destacando caracteres invisíveis no editor de texto para perceber imediatamente os erros de digitação.

A preferência parecia ser para a solução 2 então pensei em tentar desta forma primeiro. Pareceu-me a solução mais simples e rápida de corrigir. Eu queria descartar o problema de fora da prateleira para o meu código quebrado.

Caracteres invisíveis de alta luz no meu editor de texto – Parte 1

Próximo eu pesquisei no Google como destacar caracteres invisíveis com o meu editor de texto, Sublime Text editor 2.

Vira isto é suposto ser um recurso padrão do meu editor de texto.

Tempo que destaque o texto é suposto eu conseguir ver pequenos pontos brancos como a imagem abaixo (olha de perto eles estão lá nos espaços vazios):

Então destaquei o texto e nada aconteceu:

>

>

>

>

>

>

>

Decidi estacionar aqui o problema dos espaços ‘não quebrados’ por agora e tentar resolver a minha mensagem de erro de uma forma mais fácil. Sou relativamente novo a codificar, por isso a próxima solução para encontrar espaços ‘não quebrados’; corrigir as preferências ou atribuições de teclas padrão no editor Sublime Text, não me pareceu a maneira mais fácil de resolver o meu problema.

Googling the exercise itself

A próxima coisa que fiz foi ir ao Google ‘Ex25 learn Ruby the hard way’ para ver se mais alguém estava tendo os mesmos problemas que eu. Encontrei um blog com o exercício datilografado. Comparei nossos arquivos palavra por palavra na minha tela.

Não pude VER nenhuma diferença entre nossos arquivos (indicando os espaços não quebrados escondidos pode ser o que está causando meu erro).

No entanto precisei descartar a idéia de que havia um erro de digitação que não conseguia localizar em algum lugar, então digitei o arquivo inteiro novamente. Imaginando que esta era uma maneira mais rápida de chegar à solução.

O meu segundo arquivo funcionou quando eu o executei no terminal. Nenhuma mensagem de erro.

Aqui está o segundo ficheiro:

>

Fiquei intrigado onde errei ainda com o primeiro ficheiro, por isso comparei-os linha por linha.

Comparando o script de trabalho para aquele com uma mensagem de erro

Comparei-os na minha tela e notei duas diferenças que eu corrigi uma de cada vez.

>

1. Quando as funções anteriores foram chamadas em funções posteriores, por exemplo,

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

A função ex25.break_word parecia não ter sido reconhecida no script de erro (um à direita) enquanto que o Ex25. parecia azul no outro script (à esquerda).

A razão mais óbvia que pude encontrar foi que o ‘e’ não foi capitalizado. Então mudei todos os Ex25 no script quebrado para um e.

>

Executei o script mas ainda assim recebi a mesma mensagem de erro:

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

2. A próxima correção fácil que eu notei foi o nome do arquivo e o nome da função no script quebrado eram os mesmos, mas no meu novo script eu tinha nomeado o arquivo EX25b.rb.

Talvez tenha sido esta diferença no nome que foi responsável pelo erro?

Nope ..

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

Had Li todo o exercício em Learning Ruby the Hard Way que eu teria visto isto não foi a resposta:

“O módulo Ex25 não tem de estar num ficheiro chamado ex25.rb. Tente colocá-lo num novo ficheiro com um nome aleatório e depois importe esse ficheiro e veja como ainda tem o Ex25 disponível.”

Por isso decidi voltar à primeira solução, sem quebra de espaço pois agora tinha esgotado as opções fáceis e não conseguia, por toda a minha vida, ver qualquer diferença entre o erro ou o script correcto.

Caracteres invisíveis de alta luz no meu editor de texto – Parte 2

Leio como fazer isto aqui.

1. Abra as ‘preferências’ no editor de texto Sublime & selecione ‘key bindings’.

>

2. Insira no lado esquerdo, na aba ‘usuário’, o seguinte código:

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

3. Salvado então reabriu o arquivo original (quebrado 🙁 ).

>Certo o suficiente havia o Alt acidental e a barra de espaço sem quebra:

>

HALLELUJAH … Eu pensei… Finalmente corrigi o meu antigo script…….

Fiz novamente e eu STILLL tinha a mesma mensagem de erro!

Aqui é onde eu provavelmente deveria ter pensado:

“Uma vez corrigi-o e consegui trabalhar durante o exercício e completá-lo. Eu só vou encerrar o dia e não me preocupar com o arquivo que está retornando uma mensagem de erro”.

Mas eu sou muito curioso / teimoso para me contentar em apenas permitir que o erro pendure sobre meu primeiro script.

Eu executei o irb no terminal.

Corri novamente o ficheiro que tinha corrigido & o ficheiro com a mensagem de erro:

Tentei perceber qual era a diferença entre os dois ficheiros.

Talvez fossem os directórios em que foram guardados?

Verifico e tenho a certeza que foram guardados em directórios diferentes.

Então guardei o ficheiro de erro no mesmo directório que o ficheiro que funcionava…. STILL a mensagem de erro!!

Não consegui ver outra diferença por isso ….

Copiei e colei o texto do ficheiro de trabalho para o ficheiro de erro.

Então algo terrível aconteceu!

DOS ficheiros pararam de funcionar!!!!

A mesma mensagem de erro apareceu para o primeiro ficheiro e agora o ficheiro de trabalho estava a retornar ‘falso’ quando eu o ‘requisitei’ com irb:

Possível causa deste problema:

Muitos ficheiros com o mesmo nome ou com nome semelhante no mesmo directório?

Eu apaguei todos menos um… E como magia…

ESTÁ TRABALHADO !!!

Fiz o script de trabalho para o Ex25 no terminal e segui as instruções de como usar o irb para chamar as suas funções.

Aqui estão os meus resultados e a minha explicação do que está a acontecer:

O script correto para Ex25

Executar o script em linha de comando irb’

>

>

>>

>

>

Eu identifiquei os pontos em que tive de pensar um pouco sobre como estava a funcionar. Aqui está a minha explicação:

1. Imprime ‘esperar’ porque a função está agindo no array de ‘palavras’ que não está ordenado. O array ordenado é chamado ‘sorted_words’.

2. O array ‘Words’ teve o primeiro e último (“all’ e ‘wait’ ) valores deslocados na função print.

3. Chamando no array ‘sorted_words’, não no array ‘words’ que tem os valores em falta. Portanto ‘all’ ainda está no array.

4…. Parece estar faltando na figura… Então eu claramente o considerei irrelevante, então vou fazer o mesmo novamente agora..

5. Usando a variável ‘frase’ original e passando-a através da função. Ela está quebrando esta variável de frase em um array toda vez que encontra um espaço. Depois usando a função Ex25.sort_words para ordenar este array de palavras.

6. Ela está pegando a variável original ‘sentence’, quebrando-a em um array de palavras e imprimindo o primeiro e último valor desse array.

Então agora chegamos ao fim da minha luta com o exercício 25 de Learn Ruby the Hard way. Espero que vocês tenham gostado e achado útil a minha resolução de problemas de porquinho, o que acabou por resultar em eu vencer as mensagens de erro dadas ao correr o meu script. Por favor contacte-me se por acaso estiver a ler isto & precisa de alguma ajuda para o compreender.

Enjoy, 🙂

Este post foi originalmente publicado AQUI.

Articles

Deixe uma resposta

O seu endereço de email não será publicado.