Article image
Fernando Serra
Fernando Serra04/05/2022 11:05
Compartilhe

Dica Breve Para Nomeação de Variáveis, Funções e Estruturas Diversas

  • #Boas práticas

Photo by Mohammad Rahmani on Unsplash

Olá Comunidade!

Hoje eu quero falar um pouco do que aprendi nesse tempo que tenho levado estudando programação, mais especificamente sobre o uso de nomes relevantes e comentários pertinentes.

Mas Fernando? Por que isso é importante?

Bem, vamos lá! Primeiramente, vou pedir que você pense em um cenário solo, onde a única pessoa que dá manutenção e desenvolve o código do projeto em questão é você.

Agora imagine que você aceitou um contrato para desenvolver um projeto paralelo em parceria com outra pessoa ou outra equipe e de repente, seu projeto pessoal ficou engavetado por um tempo e só depois você voltou a ele, certo?

E você encontra isso:

int main()
{
  int iAmYourFather;
  iAmYourFather = 0;
  printf("Hello Adventurer! You are on Strange Univers\n");
  do{
      printf("Type 1 for Portuguese, 2 for English: \n");
      scanf("%d", &iAmYourFather);
      if (selection == 1){
      lang_ptbr();
  } else if (selection == 2){
      lang_enus();
      } else {
          printf("Digite uma opcao valida! /  Choose a valid option!\n\n");
          system("PAUSE");
          system("CLS");
      }

  } while(selection > 2 || selection < 1);
  return 0;
}

Até aí tudo bem, parece um código normal, simplista até. Você entende que existem um If esperando uma entrada do usuário ser igual a um valor, um elseIf ali esperando uma outra condição e por aí vai.

O que falta nesse código?

Comentários e nomes mais específicos talvez.

Os comentários podem ajudar você a se lembrar o por que começou um bloco de código, bem como ajudar outros programadores a melhorarem essa estrutura e prosseguir com o desenvolvimento do projeto caso você não possa mais fazê-lo.

Bons nomes para estruturas, variáveis e funções por sua vez, fazem com que você consiga instintivamente produzir mais, uma vez que não precisa ficar se lembrando que iAmYourFather foi escrito todo em CamelCase, com a intenção de ser a função principal, mas de repente, você nem lembra mais por que escolheu essa frase e dois ou três anos depois, ela deixa de fazer sentido.

No nosso exemplo trocar a variável iAmYourFather por Selection, por exemplo, faria muito mais sentido, uma vez que o restante do código espera por essa variável e faz operações semelhantes.

#include <stdio.h>
#include <stdlib.h>

//Bloco principal de execucao / Main execution block
int main()
{
  int selection;
  selection = 0;
  printf("Hello Adventurer! Welcome to C Single Dungeon\n");
  do{
      printf("Type 1 for Portuguese, 2 for English: \n");
      scanf("%d", &selection);
      if (selection == 1){
      lang_ptbr();
  } else if (selection == 2){
      lang_enus();
      } else {
          printf("Digite uma opcao valida! /  Choose a valid option!\n\n");
          system("PAUSE");
          system("CLS");
      }

  } while(selection > 2 || selection < 1);
  return 0;
}

//Funcao de Selecao em Portugues
int lang_ptbr(){
  int tmp_class = 0;
  int chClass = 0;
  do{
      printf("Seja bem vindo ao C Single Dungeon!\n");
      printf("Escolha sua Classe:\n");
      printf("1 - Guerreiro\n2 - Mago\n");
      scanf("%d", &tmp_class);
      if (tmp_class == 1){
          printf("Guerreiros sao letais no combate corpo a corpo. Como guerreiro voce recebe os seguintes bonus:\n+2 de ataque\n+1 de defesa\n-1 de esquiva\n-2 de defesa magica\n");
          printf("Deseja mesmo ser um guerreiro?\n1 - SIM\n2 - Preciso pensar melhor...\n");
          scanf("%d", &chClass);
          if (chClass == 1){
              warriorPtBr();
          } else {
              chClass = 0;
              tmp_class = 0;
          }
          } else if (tmp_class == 2) {
              printf("Magos sao mestres no uso das forcas sobrenaturais. Como mago voce recebe os seguintes:\n+2 de ataque magico\n-1 de defesa\n+1 de esquiva\n");
              printf("Deseja mesmo ser um mago?\n1 - SIM\n2 - Preciso pensar melhor...");
          } else {
              printf("Eu, seu narrador, sou um velho cansado, tenho dificuldade em entender algumas coisas, por favor, selecione uma das duas respostas que lhe pedi.\n");
              system("PAUSE");
              system("CLS");
              int lang_ptbr();
          }

  } while (tmp_class > 2 || tmp_class < 1);
  return 0;
}

//English Selection Function
int lang_enus(){
  int tmp_class = 0;
  int chClass = 0;
  do{
      printf("Welcome to C Single Dungeon!\n");
      printf("Choose your class:\n");
      printf("1 - Warrior\n2 - Mage\n");
      scanf("%d", &tmp_class);
      if (tmp_class == 1){
      printf("Warriors are lethal in hand-to-hand combat. As a warrior you receive the following bonuses:\n+2 attack\n+1 defense\n-1 dodge\n-2 magical defense\n");
      printf("Do you really want to be a warrior?\n1 - YES\n2 - I need to think better...\n");
      scanf("%d", &chClass);
      if (chClass == 1){
              warriorEnUs();
      } else {
          chClass = 0;
          tmp_class = 0;
          }
      } else if (tmp_class == 2) {
          printf("Mages are masters in the use of supernatural forces. As a mage you receive the following bonuses:\n+2 magical attack\n-1 defense\n+1 dodge\n");
          printf("Do you really want to be a mage?\n1 - YES\n2 - I need to think better...");
      } else {
          printf("I, your narrator, am a tired old man, I have difficulty understanding some things, please select one of the two answers I asked you.\n");
          system("PAUSE");
          system("CLS");
      }
  } while (tmp_class > 2 || tmp_class < 1);
  return 0;
}

int warriorPtBr(){
  int atk = 3;
  int magicalAtk = 0;
  int defense = 3;
  int magicalDefense = 0;
  int dodge = 1;
  int healthPoints = 8;

  printf("Ao finalmente se decidir, o velho contador de historias em sua frente da um sorriso e lhe oferece uma caneca que contem um liquido borbulhante. Esta frio e voce toma, pensando em se aquecer.\n");
  printf("\nSeus pensamentos sao interrompidos quase que imediatamente, uma dor repentina surge na base da sua nuca e tudo fica escuro...\n");
}

int warriorEnUs(){
  int atk = 3;
  int magicalAtk = 0;
  int defense = 3;
  int magicalDefense = 0;
  int dodge = 1;
  int healthPoints = 8;

  printf("When you finally make up your mind, the old storyteller in front of you smiles and offers you a mug that contains a bubbly liquid. It's cold and you drink it, thinking to warm up.\n");
  printf("\nYour thoughts are interrupted almost immediately, a sudden pain appears at the base of your neck and everything goes dark...\n");
}

int mage(){
  int atk = 1;
  int magicalAtk = 2;
  int defense = 1;
  int magicalDefense = 2;
  int dodge = 2;
  int healthPoints = 5;
}

int tinyOrc (){
  int atk = 2;
  int defense = 2;
  int magicalDefense = 0;
  int dodge = 1;
  int healthPoints = 6;
}

Note que os comentários estão bem espalhados identificando a maioria dos blocos de código e suas funções.

O código, é de um antigo projeto meu, da época em que estudei na Fatec Carapicuíba, oito anos atrás. Decidi retomar o projeto e apesar de achar que ia ser difícil entendê-lo, eu descobri que na verdade, a única coisa difícil foi assumir como eu programava de forma simplista antigamente haha.

Espero ter ajudado!

Compartilhe
Comentários (3)
Marciana Santos
Marciana Santos - 06/05/2022 08:42

Parabéns, Fernando!


Vamos com tanta sede de executar, que esquecemos desses detalhes.

Brenno Miranda
Brenno Miranda - 05/05/2022 20:12

Conteúdo interessantísimo! Muito obrigado pelos ensinamentos

Caroline Vicente
Caroline Vicente - 04/05/2022 12:16

Show! Realmente esses detalhes fazem toda a diferença. Obrigada pela dica!