tipagem estática, ou seja, existe um sistema de tipos bem definido e que é validado durante o tempo de compilação do código. Para isso, é necessário definir tipos explícitos para as variáveis que são criadas.
Apesar de que em versões mais recentes da linguagem foi adicionado o recurso de inferência de tipos, o que permite que o tipo das variáveis sejam definidos de forma automática pelo compilador, mas é importante frisar que isso não muda o fato do C# ter uma tipagem estática.
Existem algumas vantagens atreladas à utilização de sistemas de tipos estáticos como: equívocos de tipagem geralmente são percebidos com mais facilidade, além de que os processos de refatoração tendem a ser mais a prova de erros. Se acaba sendo necessário trocar o tipo de um parâmetro de uma função, por exemplo, o código não irá compilar até que todos os locais que referenciam o método passem a especificar o tipo correto.
Mas também existem algumas desvantagens: linguagens com tipagem estática têm tendência a serem mais verbosas, já que você precisa sempre estar declarando os tipos das variáveis. Além disso, a tipagem estática pode passar uma falsa sensação de segurança em alguns cenários, ainda mais no caso de versões mais novas das linguagens, que geralmente trabalham com inferência de tipagem, que é o caso do C#.
Além de ser estaticamente tipado, o C# também é fortemente tipado, isso quer dizer que para o C# os tipos dos dados importam, ou seja, o C# não irá realizar conversão automática de tipos, caso alguma conversão seja necessária ela deve ser feita de forma explícita pela pessoa que está desenvolvendo o software.
Como cada informação com a qual lidamos possui um tipo específico que melhor a representa, devemos escolher corretamente o tipo de variável que vamos utilizar. Portanto, é fundamental conhecer os tipos de dados que a linguagem nos oferece.
A seguir são apresentados os diversos tipos de dados do C#, a faixa de valores que ele aceita e quanto espaço uma variável desse tipo ocupa na memória.
Os tipos numéricos inteiros armazenam números sem parte fracionária (algarismos após a vírgula). Note abaixo que cada tipo aceita uma faixa de valores, e que quanto maior essa faixa, maior também é o espaço ocupado em memória. Veja ainda que os tipos cujo nome começa com a letra “u” (de “unsigned” - sem sinal), não aceitam valores negativos, mas suportam uma faixa maior de valores positivos.
Tipo | Faixa de valores | Tamanho |
---|---|---|
sbyte | -128 a 127 | 8 bits |
byte | 0 a 255 | 8 bits |
short | -32.768 a 32.767 | 16 bits |
ushort | 0 a 65.535 | 16 bits |
int | -2.147.483.648 a 2.147.483.647 | 32 bits |
uint | 0 a 4.294.967.295 | 32 bits |
long | -9.223.372.036.854.775.808 a 9.223.372.036.854.775.807 | 64 bits |
ulong | 0 a 18.446.744.073.709.551.615 | 64 bits |
O tipo int é o mais comum, mas caso você esteja interessado em trabalhar com faixas de valores específicas, pode optar pelo tipo que melhor lhe atende e que ocupa menos memória.
Os tipos de ponto flutuante representam os números “reais”, ou seja, aqueles que podem possuir uma parte fracionária.
Tipo | Faixa de valores | Precisão | Tamanho |
---|---|---|---|
float | ±1,5 x 10−45 para ±3,4 x 1038 | ~6 a 9 dígitos | 4 bytes |
double | ±5.0 × 10−324 to ±1.7 × 10308 | ~15 a 17 dígitos | 8 bytes |
decimal | ±1,0 x 10-28 para ±7,9228 x 1028 | 28 a 29 dígitos | 16 bytes |
O tipo booleano é usado para armazenar valores que podem ser representados como Verdadeiro ou Falso (sem valores intermediários).
Tipo | Faixa de valores | Tamanho |
---|---|---|
bool | true ou false | 1 bit |
Também é muito comum que precisemos lidar com textos. Para esses casos, de forma geral os textos podem ser armazenados pelos tipos char e string. O primeiro é usado para apenas um caractere, enquanto o segundo é uma coleção de caracteres (um texto).
Tipo | Faixa de valores | Tamanho |
---|---|---|
char | Um caractere | 2 bytes |
string | Textos | 2 bytes por caractere |
A fim de manter uma mínima padronização do código-fonte, o C# estabelece alguns padrões para a definição de nomes para as variáveis:
As variáveis abaixo seguem as convenções de nomenclatura:
string nomeDoAluno = "Cleyson Lima";
int idade = 21;
As variáveis abaixo ferem algumas das convenções:
int a = 0; // nome não é autoexplicativo
string NomeDoAluno = "Cleyson Lima"; // variável começando com letra maiúscula
int _idade = 21; // variável começando com caractere especial
Constantes, sob um ponto de vista prático são como variáveis, só que com o ponto de que seu valor não pode ser modificado. Isso quer dizer que, se você declara uma constante chamada MaioridadePenal
com o valor 18, esse valor não poderá ser jamais modificado durante a execução da aplicação.
A maneira de declarar uma constante no C# é através da palavra reservada const
:
const int MaioridadePenal = 18;
Veja que no caso das constantes a convenção de nomenclatura é que seja utilizado o PascalCase, ou seja, a primeira letra de cada palavra deve ser em maiúsculo.
A inferência de tipos é uma técnica que permite que os tipos das variáveis sejam definidos de forma automática pelo compilador a partir do seu contexto, isso quer dizer que o compilador irá atribuir de forma automática o tipo da variável no momento de sua declaração a partir do tipo de dado que está sendo atribuído para a mesma.
Esse processo permite que sejamos capazes de escrever um código menos verboso, pois não há mais a necessidade de explicitamente informar qual será o tipo da variável no momento de sua declaração.
No C# para que possamos utilizar a inferência de tipos fazemos uso da palavra reservada var
.
var nomeDoAluno = "Cleyson Lima"; // A váriavel será do tipo string pois recebe um dado do tipo string
var idade = 21; // A váriavel será do tipo int pois recebe um dado do tipo int
var estaVivo = true; // A váriavel será do tipo boolean pois recebe um dado do tipo boolean
Importante frisar que a inferência de tipos não retira o status de linguagem estaticamente tipada do C#, pois uma vez que o tipo foi definido mesmo que de forma automática a mesma não pode ter o seu tipo alterado ao longo da execução do programa, além disso é importante notar que a inferência de tipos só é possível de ser realizada caso a variável seja declarada e tenha seu valor inicial atribuído no mesmo momento.
var idade;
idade = 21;
O código acima não irá compilar e irá produzir um erro de compilação, pois no momento da criação da variável o compilador não é capaz de “adivinhar” qual deve ser o tipo da mesma, uma vez que não há o processo de atribuição do seu valor inicial no momento de sua declaração.
Como vimos nesse artigo, o C# possui uma tipagem estática e forte, o que faz com que as variáveis não possam ter seu tipo alterado ao longo da execução do programa e também que o C# não irá realizar conversão de tipos de forma automática.
Por fim, caso queira aprender mais sobre o C# e sua infinidade de recursos saiba que aqui na TreinaWeb temos o curso C# - Fundamentos que possui 04h05 de vídeo e um total de 29 exercícios. Conheça também nossos outros cursos de C#.
Veja quais são os tópicos abordados durante o curso de C# - Fundamentos:
Professor, programador, fã de One Piece e finge saber cozinhar. Cleyson é graduando em Licenciatura em Informática pelo IFPI - Campus Teresina Zona Sul, nos anos de 2019 e 2020 esteve envolvido em vários projetos coordenados pela secretaria municipal de educação da cidade de Teresina, onde o foco era introduzir alunos da rede pública no mundo da programação e robótica. Hoje é instrutor dos cursos de Spring na TreinaWeb, mas diz que seu coração sempre pertencerá ao Python.
Todos os artigosConheça neste artigo as variáveis, tipos de dados e constantes da linguagem Java.
Confira neste guia os principais tópicos para iniciar seus estudos na linguagem Java.
Conheça os novos tipos de dados introduzidos no C# 9.0, os inteiros nativos e os novos recursos da i...
Ultimamente, muito temos ouvido sobre o paradigma funcional, bem como as linguagens funcionais. Mas...
Você já quis criar tarefas em segundo plano com o .NET Core? Na versão 3.0 foi introduzido o templat...
Veja neste artigo como é a estrutura de um componente do Razor Componente e aprenda a criar um.
Conheça as aplicações Razor Components que serão adicionadas no .NET Core 3.0.
Veja neste artigo o que é o Project Stream da Google, a Netflix dos jogos.
Após criar uma VPC na AWS, não podemos nos descuidar com relação a segurança dessa rede. Existem dua...
Veja como você pode monitorar as conexões ao servidor Nginx e aos seus logs de acesso com o Netdata.
O Netdata é uma ferramenta opensource que te permite monitorar o seu servidor em tempo real. Visuali...
Uma evolução do ASP.NET, o ASP.NET Core é uma plataforma leve, rápida e modular, que funciona em con...