Porque goto é considerado gambiarra de programador?

1. Porque goto é considerado gambiarra de programador?

Perfil removido
removido

(usa Nenhuma)

Enviado em 08/04/2017 - 12:17h

Poh! Tem uns mano ai que fica falando que goto é gambiarra de programador sem experiência, você concorda? por que?


  


2. Re: Porque goto é considerado gambiarra de programador?

Paulo Dias
di4s

(usa XUbuntu)

Enviado em 08/04/2017 - 12:45h

Acho que o goto deve ser evitado sim... Principalmente para manter legibilidade do código.

Goto é de uma epoca onde os programas eram baseados no fluxo... Ele foi mantido, mas deve ser usado em casos especificos.( eu nunca usei )

Novos paradigma foram criados para facilitar o entendimento no programa usando outras construções...

Linux Professional Institute - LPIC-1
Novell Certified Linux Administrator - CLA
Oracle Certified Associate, Java SE Programmer - OCA

http://twitter.com/p4ulodi4s
http://www.prminformatica.com.br/


3. Re: Porque goto é considerado gambiarra de programador?

Ednux
ednux

(usa Arch Linux)

Enviado em 08/04/2017 - 13:07h

É considerado gambiarra porque a maioria dos programadores que tentam usar fazem de maneira "feia". Não é errado usar goto, se você estudar do C e for descendo até a parte eletrônica verá que muitas coisas são na verdade um goto. Como por exemplo fazer um if em assembly ou uma microinstrução para ler as proximas instruções.

obs: Não to dizendo que um if em c vira um goto em assembly, mas que segue a mesma ideia de "ir para endereços.. se tal coisa acontecer".


4. Re: Porque goto é considerado gambiarra de programador?

Paulo
paulo1205

(usa Ubuntu)

Enviado em 09/04/2017 - 06:41h

Porque é mais fácil atribuir rótulos genéricos do que fazer um pouquinho de esforço mental e examinar caso a caso.


FATO: goto mal utilizado ou abusado atrapalha a legibilidade do código.

FATO: ponteiro mal utilizado ou abusado atrapalha a legibilidade do código.

FATO: array mal utilizado ou abusado atrapalha a legibilidade do código.

FATO: variável mal utilizada ou abusada atrapalha a legibilidade do código.

FATO: funções mal utilizadas ou abusadas atrapalham a legibilidade do código.

FATO: comentários mal utilizados ou abusados atrapalham a legibilidade do código.

(Acho que deu para pegar a ideia...)


O uso de goto possibilita programar de modo confuso, sim. Mas a possibilidade de um evento não significa necessariamente que ele vai ocorrer.

Existem casos em que goto é a solução mais eficiente (maior desempenho), mais compacta (código mais curto ou com menos repetições de blocos de código idênticos), mais elegante (melhor legibilidade e inteligibilidade) ou até mesmo a única possível em problemas de construção de algoritmos. Logo, usar goto num desses casos não é gambiarra, mas sim sinal de habilidade e inteligência.

Só que esses casos não são muito comuns, principalmente em algoritmos que aparecem em cursos introdutórios de programação. Então um professor preguiçoso acaba afirmando categoricamente que “goto é ruim”, “goto é gambiarra”, “goto é uma técnica obsoleta e que não deve mais ser usada”, ou o pior de todos: “quem usar goto vai levar ZERO”.

Em C++, o emprego de exceções e da técnica RAII ajudam a evitar alguns usos de goto que são comuns em C, para tratamento de falhas de aquisição de recursos. Mesmo assim, ainda há usos válidos de goto em também C++.


5. Re: Porque goto é considerado gambiarra de programador?

Enzo de Brito Ferber
EnzoFerber

(usa FreeBSD)

Enviado em 10/04/2017 - 09:17h

Bom dia,

Excelente colocação do @paulo1205.

Se você souber utilizar o goto, não há problemas. Dá uma olhada nos fontes do Linux. Tem muito goto.
Mas são muito bem utilizados e *melhoram* a legibilidade do código.


$ cd /usr/src/linux-4.4.14
$ grep -R goto * | wc -l
130425
$


Se você for conservador e considerar que *metade* dos "goto"s encontrados pelo grep são comentários, ainda assim são 65000 goto's utilizados em código. Que acha?

Código bem feito depende do programador, não da linguagem.
(Para linguagens de gente. Brainfuck e afins não entram nisso)

Edit: Não sou muito bom com RegEx, mas melhorei um pouco aquele grep aqui para encontrar ocorrências de "goto [alguma_coisa];", que teoricamente são chamadas a goto:


$ cd /usr/src/linux-4.4.14
$ grep -R -e "goto .*;" * | wc -l
129861
$


É razoável assumir que ao menos 125k desses 129k sejam chamadas a goto e não comentários. Portanto, é muito goto...

P.S.: Espero não ter errado na regex. Se alguém puder dar um feedback seria ótimo!

Enzo Ferber
[]'s


$ indent -kr -i8 src.c

"(...)all right-thinking people know that (a) K&R are _right_ and (b) K&R are right."
- linux/Documentation/CodingStyle - TORVALDS, Linus.







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts