0Pricing
C# Academy · Aula

Experiência do desenvolvedor e limitações

Veja como os geradores afetam a experiência do desenvolvedor: nomes, descoberta de arquivos, diagnósticos, desempenho da compilação e alternativas seguras — com emulação no C# 6.

Experiência do desenvolvedor e limitações é uma aula grátis de C# Academy no CoddyKit. Esta é a aula 2 de 2. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de C# Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de C# Academy inclui 2 aulas no total.

Visão geral de DX e limites

Objetivo: tornar o código gerado fácil de usar.

  • Nomes e locais de arquivos previsíveis
  • Diagnósticos úteis
  • Saídas pequenas e focadas
  • Conheça os limites: somente em tempo de compilação, sem reflexão em tempo de execução

Nomes previsíveis

Use nomes estáveis (por exemplo, *.g.cs, DebugId) para que os usuários encontrem rapidamente os membros gerados.

using System;

// Emulate "predictable" generated naming: suffixes and folders are consistent.
public partial class Order
{
  public int Id;
}

// Simulated generated piece: same partial name, with a clear suffix convention.
public partial class Order // would live in Order.g.cs typically
{
  public string DebugId()
  {
    // predictable member name makes discovery easy
    return "Order#" + Id;
  }
}

public class Program
{
  public static void Main(string[] args)
  {
    Order o = new Order();
    o.Id = 42;
    Console.WriteLine(o.DebugId());
  }
}

Como evitar conflitos

Um espaço de nomes separado (por exemplo, Generated.*) e prefixos claros ajudam a evitar conflitos com o código do usuário.

using System;

namespace Generated
{
  // Emulate a generator using a dedicated namespace to reduce collisions
  public static class OrderExtensions
  {
    public static string ToLabel(this Order o) { return "Order: " + o.Id; }
  }
}

public partial class Order { public int Id; }

public class Program
{
  public static void Main(string[] args)
  {
    Order o = new Order();
    o.Id = 7;
    // Extension lives under Generated.* to stay out of the way
    Console.WriteLine(Generated.OrderExtensions.ToLabel(o));
  }
}

Diagnósticos úteis

Bons geradores emitem diagnósticos claros quando a entrada é inválida; assim, os usuários corrigem o código rapidamente.

using System;

// Emulate generator diagnostics: validate inputs and print clear messages.
public static class GenCheck
{
  public static string EmitGetter(string fieldName)
  {
    if (string.IsNullOrEmpty(fieldName))
      return "DIAGNOSTIC: Field name is empty. Skipping emission.";
    if (!char.IsLetter(fieldName[0]))
      return "DIAGNOSTIC: Field must start with a letter: " + fieldName;

    // pretend emission was fine
    return "OK: Generated getter for " + fieldName;
  }
}

public class Program
{
  public static void Main(string[] args)
  {
    Console.WriteLine(GenCheck.EmitGetter("1bad")); // diagnostic
    Console.WriteLine(GenCheck.EmitGetter("name")); // ok
  }
}

Saídas pequenas e focadas

Prefira arquivos gerados pequenos, com uma única responsabilidade; é mais fácil lê-los e depurá-los.

using System;

// Emulate small, single-purpose emissions instead of huge files.
public partial class Report
{
  public int Count;
}

public partial class Report // Report.Stats.g.cs idea
{
  public double Average(int total)
  {
    if (Count == 0) return 0.0;
    return (double)total / Count;
  }
}

public partial class Report // Report.Format.g.cs idea
{
  public string Summary(int total)
  {
    return "Total=" + total + ", Count=" + Count + ", Avg=" + Average(total);
  }
}

public class Program
{
  public static void Main(string[] args)
  {
    Report r = new Report();
    r.Count = 4;
    Console.WriteLine(r.Summary(20));
  }
}

Limites e alternativas

Limites:

  • É executado em tempo de compilação, não em tempo de execução.
  • Evite operações pesadas de E/S ou chamadas de rede.
  • Não dependa de reflexão em tempo de execução no caminho do gerador.
  • Mantenha as saídas determinísticas.

Planos alternativos: se a entrada for inválida, emita diagnósticos ou estruturas mínimas em vez de fazer toda a compilação falhar.

Boa prática de DX

Verificação rápida: qual prática melhora a experiência do desenvolvedor ao usar geradores de código-fonte?

Recapitulação

Recapitulação: prefira nomes previsíveis, diagnósticos claros e saídas pequenas. Respeite os limites do tempo de compilação e ofereça alternativas seguras quando a entrada for inválida.

Perguntas Frequentes

A aula “Experiência do desenvolvedor e limitações” é grátis?

Sim — o texto completo de “Experiência do desenvolvedor e limitações” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de C# Academy, atualize para CoddyKit PRO. O curso de C# Academy inclui 2 aulas no total.

O que vou aprender em “Experiência do desenvolvedor e limitações”?

Veja como os geradores afetam a experiência do desenvolvedor: nomes, descoberta de arquivos, diagnósticos, desempenho da compilação e alternativas seguras — com emulação no C# 6. Você pratica C# Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar C# Academy?

Nenhuma experiência prévia é necessária. C# Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 2 de 2.

Quanto tempo leva a aula “Experiência do desenvolvedor e limitações”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de C# Academy?

Sim. Cada aula de C# Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Conceito e casos de uso; geradores incrementais (visão geral)
  2. Experiência do desenvolvedor e limitações
← Voltar para C# Academy