Enquete: qual bloco de código C++ é mais legível?

1. Enquete: qual bloco de código C++ é mais legível?

Paulo
paulo1205

(usa Ubuntu)

Enviado em 24/04/2026 - 23:46h

Para todas as alternativas abaixo, suponha que as variáveis host, user e domain foram todas declaradas com tipo std::string, e que passaram por um parser que tentou atribuir-lhes valores. Supondo que uma ou mais dessas atribuições podem ter falhado, deixando a variável correspondente vazia, qual a forma mais legível para você de atribuir valores default não-vazios para tais variáveis?

Alternativa 1:
	if(host.empty())
host="*";
if(user.empty())
user="*";
if(domain.empty())
domain="*";


Alternativa 2:
	host=(host.empty()? "*": host);
user=(user.empty()? "*": user);
domain=(domain.empty()? "*": domain);


Alternativa 3:
	for(auto p_str: {&host, &user, &domain})
if(p_str->empty())
p_str->assign("*");


Alternativa 4:
	for(auto p_str: {&host, &user, &domain})
if(p_str->empty())
(*p_str)="*";


Alternativa 5:
	if(host.empty())	host="*";
if(user.empty()) user="*";
if(domain.empty()) domain="*";




NOTA: Intencionalmente estou deixando ligada a opção de deixar o chatbot do VoL “opinar”. Mas não se deixem influenciar pelo que ele disser, por favor.


... Então Jesus afirmou de novo: “(...) eu vim para que tenham vida, e a tenham plenamente.” (João 10:7-10)


  


2. Re: Enquete: qual bloco de código C++ é mais legível?

Alexa Bolada
alexabolada

(usa Debian)

Enviado em 24/04/2026 - 23:47h

Eu sou Alexa Bolada.
Uso Debian e Vim.

Resposta direta.

Prefiro a Alternativa 1.

É clara.
É explícita.
Não introduz truques nem indireções.

Alternativa 5 é equivalente.
Mas falta chaves.
Chaves aumentam segurança e legibilidade.

Alternativa 2 usa operador ternário para atribuição direta.
Isso é menos idiomático.
Menos legível para quem mantém o código.

Alternativas 3 e 4 reduzem repetição.
Mas introduzem ponteiros/iteração que podem confundir.
Podem ser aceitáveis em código que já usa esse estilo.

Sugestão limpa e concisa.


auto default_if_empty = [](std::string &s) {
if (s.empty()) s = "*";
};

default_if_empty(host);
default_if_empty(user);
default_if_empty(domain);


Outra opção sem ponteiros.


for (auto &r : {std::ref(host), std::ref(user), std::ref(domain)})
if (r.get().empty()) r.get() = "*";


Fim.


3. Re: Enquete: qual bloco de código C++ é mais legível?

Paulo
paulo1205

(usa Ubuntu)

Enviado em 25/04/2026 - 00:01h

Vou indicar minha preferência só na próxima semana, para não influenciar os votos de vocês (para além do que as explicações do chatbot do VoL já pode ter influenciado).

Mas posso dizer o seguinte: estava revisitando código antigo para acomodar uma melhoria que foi feita numa biblioteca de consulta a base de dados lá no meu trabalho, e eu vi uma das alternativas acima e fiquei desconfortável com ela, e acabei mudando para outra que também está acima.


... Então Jesus afirmou de novo: “(...) eu vim para que tenham vida, e a tenham plenamente.” (João 10:7-10)






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts