Curso Completo de .Net e C# - Parte III
Primeiros conceitos de como trabalhar com valores
Olá amigos, aqui estamos para prosseguir com o conteúdo do curso. Ainda estamos no que se pode classificar de propedêutica do curso (isso mesmo, andei lendo um dicionário) mas sempre avançando em conhecimento.
Variáveis
O tema variáveis é de grande importância pois sempre estamos necessitando armazenar valores, sejam esses passados pelo usuário ou até mesmo obtidos do sistema. As variáveis são espaços reservados na memória e sua declaração segue a seguinte sintaxe [modificador de acesso][tipo atributo]<tipo da variável><identificador>. Sintaxe é a forma estabelecida de se usar um comando específico, os valores entre colchetes [] representam valores opcionais já os valores entre o sinal de menor e maior <> são valores obrigatórios e sempre serão digitados. O modificador de acesso diz qual é o alcance que essa variável terá, a tabela da Figura 01 mostra quais são os possíveis modificadores e seu alcance, quando esse valor não é digitado o padrão(default) usado é private. O tipo atributo define se a variável terá o seu valor constante(const), se terá o seu valor somente para leitura(readonly) ou um valor estático(static). O tipo da variável diz qual valor ela recebe ou armazena, veja na tabela da Figura 02 alguns possíveis tipos e seus respectivos valores. O identificador da variável é o nome que ela terá no programa, uma boa prática de programação é sempre dar nomes que tragam significado para o valor que será guardado naquela variável. Um exemplo disso é uma variável que irá armazenar a idade de um cliente, não faz sentido nomeá-la como “cor” e sim “idade”. Existem algumas outras recomendações para declaração de variáveis, entre elas não usar underline(_) no nome, sempre iniciar um nome de variável com letra minúscula e se ela for composta por mais de uma palavra mostre isso começando a nova palavra com uma letra maiúscula, exemplo “idadeDoCliente”. Nunca escreva o nome da variável somente com letra maiúscula. Existem alguns nomes que estão na lista de palavras reservadas pela linguagem C# e que não podem ser utilizadas como identificador, quando você usa o Visual Studio 2005 essas palavras aparecem em azul o que nos ajuda na identificação (Figura 03).
Modificador |
Descrição |
Private |
Acesso limitado aos membros da classe. Não pode ser acessado fora do bloco da classe e nem pelas classes derivadas. <default> |
Public |
Acesso ilimitado, é possível acessar mesmo fora do bloco da classe e das classes derivadas da mesma. |
Protected |
Acesso limitado aos membros da classe. Pode ser acessado pelas classes derivadas. |
Internal |
Acesso limitado ao Assembly que o contém. Pode ser acessado pelos objetos derivados da classe. |
Protected Internal |
Ele permite que seja usado o modificador Protected ou Internal. Sendo sua utilização baseada no contexto. |
Figura 01. Tabela com os modificadores de acesso
Tipo |
Tamanho em memória |
Intervalo de Valores |
bool |
4 bytes |
true ou false |
byte |
1 byte |
0 até 255 |
sbyte |
1 byte |
-128 até 127 |
short |
2 bytes |
-32.768 até 32.767 |
int |
4 bytes |
-2.147.483.648 até 2.147.483.647 |
long |
8 bytes |
-9.223.372.036.854.775.808 até 9.223.372.036.854.775.807 |
ushort |
2 bytes |
0 até 65.535 |
uint |
4 bytes |
0 até 4.294.967.295 |
ulong |
8 bytes |
0 até 18.446.744.03.709.551.615 |
float |
4 bytes |
+/-3.4028235X1038 até +/-1.401298X10-45 |
decimal |
16 bytes |
+/- 1X10-28 até +/- 7.9X1028 (128-bits) |
double
|
8 bytes |
+/-1.79769313486231570X10308 até +/- 4.94065645841246544X10-324 |
char |
2 bytes |
Um caracter unicod de 16-bits |
DataTime |
8 bytes |
Data e Hora |
Object |
4 bytes(plataforma 32 bits) ou 8 bytes(plataforma 64 bits) |
Qualquer tipo |
Figura 02. Tabela com alguns tipos
abstract |
as |
base |
bool |
break |
byte |
case |
catch |
char |
checked |
class |
const |
continue |
decimal |
default |
delegate |
do |
double |
else |
enum |
event |
explicit |
extern |
false |
finally |
fixed |
float |
for |
foreach |
goto |
if |
implicit |
in |
int |
interface |
internal |
is |
lock |
long |
namespace |
new |
null |
object |
operator |
out |
override |
params |
private |
protected |
public |
readonly |
ref |
return |
sbyte |
sealed |
short |
sizeof |
stackalloc |
static |
string |
struct |
switch |
this |
throw |
true |
try |
typeof |
uint |
ulong |
unchecked |
unsafe |
ushort |
using |
virtual |
void |
volatile |
while |
|
|
|
Figura 03. Tabela com todas as palavras reservadas do C#
Sempre que chegamos nessa parte do curso surge a dúvida da utilidade desse assunto, pois parece que estamos estudando um tema que não possui um valor significante para nosso objetivo maior que é o de desenvolver logo nosso próprio sistema. Essa impressão é falsa pois nunca conseguiremos produzir alguma coisa se não tivermos um bom conhecimento desse assunto, ele nos diz muita coisa referente aos valores que iremos utilizar e como trabalhar com eles. Mas normalmente a maior dúvida é porque de tantos tipos de variáveis se poderia simplesmente existir um tipo que suportasse todos valores possíveis, assim facilitaria grandemente a nossa vida. Tenho que lhe confessar que também já me perguntei isso e talvez por esse motivo possa lhe explicar o que acontece. Quando comparamos variáveis numéricas do tipo long que comporta o intervalo de valores de -9.223.372.036.854.775.808 até 9.223.372.036.854.775.807 e o tipo byte que comporta o singelo intervalo de valores de 0 até 255 fica a pergunta no ar – onde utilizar o tipo byte ? E a resposta poderia ser em uma variável para armazenar a idade dos clientes, pois um cliente nunca vai ter menos de 0 anos de vida e se não estiver em histórias bíblicas possivelmente não alcançara uma idade maior do que 255 anos. Ai você como um bom aluno aceitaria essa minha explicação, mas ainda não sanaria a dúvida, pois mesmo não existindo cliente com mais de 255 anos seria possível colocar esse valor em um tipo long, ai eu terei que concordar e usar a explicação lógica e verdadeira para a existência de tantos tipos de valores. Isso ocorre pelo simples motivo do uso da memória, como você pode observar na tabela da Figura 02, cada tipo de valor possui um tamanho em memória e isso é de grande importância quando estamos tratando de performance de software. Apesar dos computadores atuais possuírem um grande poder de processamento sempre se busca usar a menor quantidade de memória e espaço possível do nosso cliente, e quando falamos de internet o tema fica mais sério, pois apesar do avanço do uso da banda larga o tráfego de informações na rede ainda é bem limitado. Então na verdade quando usamos o tipo byte para idade não estamos observando o valor comportado pelo tipo, mas sim o tamanho que ele ocupará em nosso sistema. Essa também é uma boa prática de programação, sempre busque utilizar recursos que o ajudem na performance do programa. Mas não se preocupe em decorar valores e tamanhos de tipos agora, sempre que precisar use a tabelinha da Figura 02 e com o passar do tempo a escolha do tipo apropriado para o uso vai torna-se automático.
Abaixo segue um modelo básico de declaração e atribuição de variáveis. É bom sempre lembrar que o C# é case-sensitive, ou seja, faz distinção entre maiúsculo e minúsculo então tome cuidado com esse detalhe. Apesar de a linguagem fazer distinção entre nomes com ou sem letras maiúsculas a prática de distinguir nomes de variáveis somente pelo uso de maiúsculo ou minúsculo não é nem um pouco recomendado, pois torna o programa difícil de compreender. E antes de mostrar o exemplo, devo dizer que variáveis sempre estão dentro do bloco de uma classe e terminam com ponto-e-vírgula ( ; ), isso também é importante lembrar.
1ª using System;
2ª class Program
3ª {
4ª static void Main(string[] args)
5ª {
6ª //Declaração de variáveis
7ª int valor1;
8ª string nome1;
9ª
10ª //Atribuição de valores a variáveis
11ª valor1 = 10;
12ª nome1 = "carro";
13ª
14ª //Declaração e Atribuição de valores a variáveis
15ª int valor2 = 20;
16ª string nome2 = "moto";
17ª }
18ª }
Listagem 01. Formas de declarar e atribuir valores a variáveis
Esse bloco de código mostra como se declara e atribui valores a variáveis. Não irei descrever linha a linha como fiz no artigo anterior somente irei comentar cada pedaço de código importante nesse momento. Na 7ª linha estamos declarando uma variável com o nome valor1 do tipo int, na 8ª linha outra variável chamada de nome1 do tipo string. A 11ª linha mostra a atribuição de valor à variável valor1 e na 12ª linha a atribuição de valor à variável nome1, note que o valor passado para uma variável do tipo string deve está entre aspas dupla ( “” ). Podemos também declarar e atribuir valores a variáveis na mesma linha é o que acontece na 15ª e 16ª linha. Observe também que as variáveis estão dentro do método Main() mas poderiam está fora dele desde que estejam dentro do bloco de uma classe.
Operadores
Quando trabalhamos com valores sempre existe a necessidade de efetuar operações matemáticas para podermos obter resultados e tornar a utilização do computador mais próxima de nossas tarefas cotidianas. É nesse contexto que surge a utilização dos operadores.
Operador |
Descrição |
+ (Adição) |
Usado para somar valores numéricos. Ex.: 2 + 3 = 5 |
- (Subtração) |
Usado para subtrair valores numéricos. Ex.: 8 – 3 = 5 |
* (Multiplicação) |
Usado para multiplicar valores numéricos. Ex.: 3 * 4 = 12 |
/ (Divisão) |
Usado para dividir valores numéricos. Ex.: 10 / 2 = 5 |
% (Resto) |
Usado para obter o resto de uma divisão dos valores numéricos. Ex.: 12 / 5 = 2 |
Figura 03. Tabela de operadores numéricos
Com esses operadores podemos realizar grande parte de nossas atividades. A utilização desses operadores se restringe aos tipos numéricos(byte, int, long, double, etc) e sua utilização em outros tipos que não sejam numéricos ocasionarão erro no programa. O sinal de adição (+) pode ser utilizado para concatenar(juntar) strings mas sua utilização apresenta baixa performance e no próximo artigo será tratado o tema de como trabalhar com textos. Nossos matemáticos de plantão podem ter sentido a falta de operadores como de potenciação, radiciação e alguns outros, mas eu tenho uma boa informação para vocês, é possível fazer esses cálculos utilizando somente esses operadores apresentados, mas se por algum motivo vocês não estiverem dispostos a fazer isso na mão existe a classe chamada Math dentro do namespace System que trata de cálculos matemáticos. Exemplo é o Math.Pow(double x, double y) que significa xy onde você pode colocar valores do tipo double(olha ai mais um bom motivo para você entender sobre tipos) e obter o resultado desse cálculo, mas se sinta a vontade de fazer na mão se quiser.
1ª using System;
2ª class Program
3ª {
4ª static void Main(string[] args)
5ª {
6ª //Declaração de variáveis
7ª int valor1, valor2, valor3;
8ª
9ª //atribuição de Valores a variáveis
10ª valor1 = 10;
11ª valor2 = 20;
12ª valor3 = 30;
13ª
14ª //Imprimindo as variáveis no console
15ª Console.WriteLine(valor1 + valor2);
16ª Console.WriteLine(valor2 * valor3);
17ª Console.Read();
18ª }
19ª }
Listagem 02. Utilização de operadores matemáticos
A Listagem 02 apresenta uma utilização básica dos operadores matemáticos e mostra mais uma característica na declaração das variáveis que é a possibilidade de se declarar mais de uma variável do mesmo tipo por linha, somente separando cada uma por vírgula(7ª linha). O resultado apresentado será o da soma de valor1 que é 10 com valor2 que é 20 (15ª linha), ou seja, será exibido na tela 30. Na 16ª linha aparece a multiplicação das variáveis valor2 = 20 e valor3 = 30 que resulta em 600.
E outra vez chegamos ao final de mais uma parte do nosso curso. Como vocês podem notar o nível de informação está aumentando gradativamente e com isso continuamos aprendendo mais sobre C#. Procure sempre treinar o que você aprendeu para fixar o conteúdo. Esse tema ainda não está encerrado aqui no curso, no próximo artigo iremos nos aprofundar um pouco mais e tratar sobre novos assuntos relacionados. E claro, estou sempre à disposição para ajudar nas dúvidas que forem surgindo e para receber críticas e sugestões sobre o conteúdo e a forma abordada dos assuntos. Abraços e até mais...