Guia de Engenharia de Prompt: Economize Tokens com Comandos Precisos

Imagem
Foto: Google DeepMind / Pexels Resumo rápido Entenda o que são tokens e por que cada fragmento de texto impacta o custo e o processamento. Aprenda o método dos 4 pilares para criar instruções técnicas diretas e sem redundâncias. Descubra como o uso de delimitadores substitui frases explicativas longas e economiza recursos. Veja exemplos práticos de como reduzir o tamanho de um prompt em mais de 50% mantendo a precisão. Se você já sentiu que está gastando "munição" à toa ao interagir com uma IA, este guia é para você. No nosso dia a dia de desenvolvimento, tratar o prompt como uma conversa de bar é um erro comum que consome recursos preciosos. Cada palavra que enviamos para o modelo é processada e cobrada, e entender essa mecânica é a diferença entre um sobrevivente eficiente e alguém que fica sem suprimentos no meio da missão. Neste artigo, vamos mergulhar na Engenharia de Prompt com foco total em eficiência. Vamos aprender a cortar o que é irrelevante, estruturar o que é v...

Arrays em C#: o inventário do seu programa (guia para iniciantes)

Mascote do Devs na Prática segurando a mochila ao lado do título Arrays em C#

Resumo rápido

  • Um array guarda vários valores do mesmo tipo numa única variável.
  • O tamanho é definido na criação e não muda depois.
  • As posições (índices) começam em 0: o último é Length - 1.
  • Acessar uma posição que não existe gera IndexOutOfRangeException.
  • Para percorrer, use for (quando precisa do índice) ou foreach.

Num jogo de sobrevivência, você não carrega uma variável para cada item. Você tem uma maleta com compartimentos. No C#, essa maleta é o array: uma variável que guarda vários valores do mesmo tipo, lado a lado.

Este post usa laços para percorrer o array. Se ainda não viu, comece por Laços de repetição em C#.

Criando um array

Existem duas formas comuns. Quando você já sabe os itens, liste entre chaves. Quando só sabe o tamanho, use new.

C#

// Com os itens já definidos
string[] maleta = { "pistola", "erva verde", "granada", "faca" };

// Só com o tamanho: 3 compartimentos, todos começam com 0
int[] municaoPorArma = new int[3];

Console.WriteLine($"A maleta tem {maleta.Length} itens.");
Console.WriteLine($"Munição da primeira arma: {municaoPorArma[0]}");

Saída esperada

A maleta tem 4 itens.
Munição da primeira arma: 0

Os colchetes [] depois do tipo dizem "isto é um array de". Um int[] só aceita int; um string[] só aceita string.

Índices: o compartimento começa no zero

Mascote explicando um array maleta com índices começando em 0

Cada item fica numa posição numerada, chamada índice. E aqui está a pegadinha de todo iniciante: o primeiro índice é 0, não 1.

Índice0123
maleta[índice]pistolaerva verdegranadafaca

Com 4 itens, os índices vão de 0 a 3. Por isso o último item está sempre em Length - 1.

Lendo e trocando itens

Para ler ou alterar um item, use o nome do array e o índice entre colchetes:

C#

string[] maleta = { "pistola", "erva verde", "granada", "faca" };

Console.WriteLine($"Primeiro item: {maleta[0]}");
Console.WriteLine($"Último item: {maleta[maleta.Length - 1]}");

// Usou a granada e pegou uma lanterna no lugar
maleta[2] = "lanterna";
Console.WriteLine($"Agora o compartimento 2 tem: {maleta[2]}");

Saída esperada

Primeiro item: pistola
Último item: faca
Agora o compartimento 2 tem: lanterna

O erro mais comum: passar do fim

Mascote tapando os olhos diante do erro IndexOutOfRangeException

Tentar usar um índice que não existe derruba o programa com IndexOutOfRangeException:

C#

string[] maleta = { "pistola", "erva verde", "granada", "faca" };
Console.WriteLine(maleta[4]); // não existe compartimento 4!

Saída esperada

Unhandled exception. System.IndexOutOfRangeException: Index was outside the bounds of the array.

⚠️ Em laços, use i < maleta.Length e nunca i <= maleta.Length. O <= tenta ler uma posição a mais e cai exatamente nesse erro.

Percorrendo o array

Use for quando precisa saber a posição de cada item, e foreach quando só quer cada item:

C#

string[] maleta = { "pistola", "erva verde", "granada" };

for (int i = 0; i < maleta.Length; i++)
{
    Console.WriteLine($"[{i}] {maleta[i]}");
}

int[] municao = { 12, 0, 6 };
int total = 0;
foreach (int balas in municao)
{
    total += balas;
}
Console.WriteLine($"Total de munição: {total}");

Saída esperada

[0] pistola
[1] erva verde
[2] granada
Total de munição: 18

Procurando um item

Para saber se algo está na maleta, o C# já tem pronto o Array.IndexOf. Ele devolve o índice do item, ou -1 se não encontrar:

C#

string[] maleta = { "pistola", "erva verde", "granada" };

int posicao = Array.IndexOf(maleta, "erva verde");

if (posicao >= 0)
{
    Console.WriteLine($"Erva verde no compartimento {posicao}.");
}
else
{
    Console.WriteLine("Sem erva verde. Cuidado!");
}

Saída esperada

Erva verde no compartimento 1.

E se a maleta precisar crescer?

O array tem tamanho fixo: depois de criado com 4 compartimentos, ele terá 4 para sempre. Quando você precisa adicionar e remover itens à vontade, use uma List<string>, que cresce sozinha. Ela é o assunto do post List, Dictionary e HashSet em C#.

DESAFIO

Tente resolver antes de abrir a resposta. Sobreviveu? Vá para o próximo.

  1. Num array com 6 itens, qual é o índice do último?

    Ver resposta

    5, porque os índices vão de 0 a Length - 1.

  2. Crie um array int[] danos = { 10, 40, 60 }; e mostre o maior dano usando um laço.

    Ver resposta
    int[] danos = { 10, 40, 60 };
    int maior = danos[0];
    foreach (int d in danos)
    {
        if (d > maior) maior = d;
    }
    Console.WriteLine(maior); // 60
  3. O que está errado aqui? for (int i = 0; i <= maleta.Length; i++)

    Ver resposta

    O <= faz o laço tentar ler maleta[maleta.Length], que não existe, e o programa para com IndexOutOfRangeException. O certo é i < maleta.Length.

Conclusão

Agora você sabe criar a maleta, acessar cada compartimento pelo índice, trocar itens, percorrer tudo e escapar do erro de índice fora do limite. Com operadores, decisões, laços e arrays, você já tem as ferramentas para escrever seus primeiros programas completos em C#.

📖 Próximo passo: List, Dictionary e HashSet em C#.

Comentários

Postagens mais visitadas deste blog

Classes e objetos em C#: criando o seu personagem do jeito certo

Console.WriteLine e Console.ReadLine em C#: conversando com o jogador

Modificadores de acesso em C#: public, private, protected e internal