Entendimento e uso de variáveis em C# - …§ao-a-C.pdf · Entendimento e uso de variáveis em C#...

23
Entendimento e uso de variáveis em C# Variáveis representam locais de memória nos quais seus programas podem armazenar valores e acessá-los e/ou modificá-los durante a execução. Confuso? Vamos analisar melhor este cenário. Toda vez que você executa um aplicativo, o sistema operacional carrega as instruções deste programa para a memória principal de seu computador. Durante o processamento das diversas funções e cálculos, este aplicativo precisa armazenar valores temporariamente. Sem entrar em discussões técnicas sobre o funcionamento de hardware e memórias, podemos dizer que a memória principal de seu computador é dividida em posições de memória, cada posição possuindo um endereço único. Veja a ilustração a seguir: Ora, não seria nada prático acessar estas posições de memória usando seus endereços (representados por valores inteiros hexadecimais). Dependendo da quantidade de memória principal disponível, estes endereços podem chegar à casa dos bilhões. Em vez disso as linguagens de programação usam apelidos para estas posições de memória. Tais apelidos são conhecidos como variáveis. Uma variável possui cinco atributos muito importantes. São eles: 1) Nome – É o nome que identificará a variável. Este nome deve ser único dentro de seu escopo (espaço de atuação), ou seja, nada impede que classes e métodos tenham nomes semelhantes àqueles encontrados em outras classes e métodos. 2) Valor – É o valor contido na variável. Veremos mais adiante como atribuir ou alterar os valores contidos em variáveis. 3) Tipo – É o tipo de dados que será armazenado nas variáveis. Tipos de dados podem ser inteiro, string (texto), números de ponto flutuante, etc. Tipos de dados serão vistos mais adiante. 4) Visibilidade ou escopo – É o alcance de visibilidade, ou seja, os locais a partir dos quais esta variável poderá ser acessada pelas diversas partes do código. A discussão sobre escopo de variáveis será adiada até a nossa analise de classes, métodos e estruturas de repetição. 5) Endereço – Cada variável possui um endereço único. Este atributo terá sua importância destacada quando abordarmos código não seguro (unsafe code) usando ponteiros. Agora que já sabemos o suficiente sobre variáveis, vamos escrever um aplicativo exemplificando seu uso. Considere a listagem a seguir: using System; class Variaveis { static void Main() { int valor; valor = 10; Console.WriteLine("O valor é: {0}", valor); valor = 20; Console.WriteLine("O valor foi alterado para: {0}", valor); } }

Transcript of Entendimento e uso de variáveis em C# - …§ao-a-C.pdf · Entendimento e uso de variáveis em C#...

Entendimento e uso de variáveis em C# Variáveis representam locais de memória nos quais seus programas podem armazenar valores e acessá-los e/ou modificá-los durante a execução. Confuso? Vamos analisar melhor este cenário.

Toda vez que você executa um aplicativo, o sistema operacional carrega as instruções deste programa para a memória principal de seu computador. Durante o processamento das diversas funções e cálculos, este aplicativo precisa armazenar valores temporariamente. Sem entrar em discussões técnicas sobre o funcionamento de hardware e memórias, podemos dizer que a memória principal de seu computador é dividida em posições de memória, cada posição possuindo um endereço único. Veja a ilustração a seguir:

Ora, não seria nada prático acessar estas posições de memória usando seus endereços (representados por valores inteiros hexadecimais). Dependendo da quantidade de memória principal disponível, estes endereços podem chegar à casa dos bilhões. Em vez disso as linguagens de programação usam apelidos para estas posições de memória. Tais apelidos são conhecidos como variáveis. Uma variável possui cinco atributos muito importantes. São eles: 1) Nome – É o nome que identificará a variável. Este nome deve ser único dentro de seu escopo (espaço de atuação), ou seja, nada impede que classes e métodos tenham nomes semelhantes àqueles encontrados em outras classes e métodos. 2) Valor – É o valor contido na variável. Veremos mais adiante como atribuir ou alterar os valores

contidos em variáveis. 3) Tipo – É o tipo de dados que será armazenado nas variáveis. Tipos de dados podem ser inteiro, string (texto), números de ponto flutuante, etc. Tipos de dados serão vistos mais adiante. 4) Visibilidade ou escopo – É o alcance de visibilidade, ou seja, os locais a partir dos quais esta variável poderá ser acessada pelas diversas partes do código. A discussão sobre escopo de variáveis será adiada até a nossa analise de classes, métodos e estruturas de repetição. 5) Endereço – Cada variável possui um endereço único. Este atributo terá sua importância destacada quando abordarmos código não seguro (unsafe code) usando ponteiros. Agora que já sabemos o suficiente sobre variáveis, vamos escrever um aplicativo exemplificando seu uso. Considere a listagem a seguir: using System;

class Variaveis

{

static void Main()

{

int valor;

valor = 10;

Console.WriteLine("O valor é: {0}", valor);

valor = 20;

Console.WriteLine("O valor foi alterado para: {0}", valor);

}

}

Compile este exemplo e observe o resultado de sua execução. Você terá as seguintes mensagens: O valor é: 10

O valor foi alterado para: 20

Vamos entender o que aconteceu aqui. Dentro do método Main temos a declaração de uma variável do tipo inteiro chamada valor. Em seguida atribuímos o valor 10 à esta variável. Tipos de dados serão vistos mais adiante. O operador de atribuição será apresentado na parte 3. A linha

seguinte faz uso do método WriteLine da classeConsole para exibir o valor desta variável no console: Console.WriteLine("O valor é: {0}", valor);

Aqui temos uma construção que merece muita atenção. Observe o símbolo {0} dentro das aspas ao redor do texto a ser exibido. Este símbolo é um lugar de marcação para os valores das variáveis localizadas após a vírgula. Atente para o fato de que você poderá ter um número ilimitado de nomes de variáveis após a vírgula e seus valores poderão ser exibidos usando {0}, {1}, {2} e assim por diante.

A quarta linha do código: valor = 20;

atribui um novo valor à variável valor. Para finalizar, uma nova chamada ao métodoWriteLine exibe o novo valor no console.

A diferença entre declaração e definição de variáveis Para um perfeito entendimento e uso de variáveis, é necessário perceber uma sutil diferença entre declaração e definição de variáveis. Vejamos o significado de cada uma nas linhas seguintes.

A declaração de uma variável informa o compilador sobre seu nome e seu tipo. Veja uma linha de código que declara uma variável chamada idade: int idade;

A definição ou inicialização de variáveis ocorre quando as células de memória necessárias ao armazenamento destas variáveis são alocadas. Veja, por exemplo, um trecho de código que declara uma variável e em seguida a inicializa:

int idade;

idade = 20;

Dependendo do contexto em que uma variável é declarada, o compilador a inicializa automaticamente com um valor padrão para o tipo de dados. Porém, variáveis locais nunca são inicializadas automaticamente. Uma variável local é uma variável declarada dentro de métodos e alguns outros blocos de código. Para demonstrar como o compilador C# se comporta quando uma

variável local é declarada, mas ainda não definida (inicializada), vamos escrever o seguinte aplicativo: using System;

class Variaveis

{

static void Main()

{

int idade;

Console.WriteLine("Idade: {0}", idade);

}

}

Este código está disponível no arquivo Variaveis2.cs. Experimente compila-lo e verá a seguinte mensagem de erro: Variaveis2.cs(9,37): error CS0165: Use of unassigned local variable 'idade'

Esta mensagem de erro ocorreu porque a variavel idade foi declarada dentro do métodoMain do aplicativo e, portanto, é uma variável local. Variáveis locais devem sempre ser inicializadas antes de serem usadas.

Observação

C# permite que a declaração e definição de uma variável sejam feitas em apenas uma linha. Assim, é perfeitamente legal escrever o trecho de código seguinte: int idade;

idade = 20;

em uma forma mais reduzida: int idade = 20;

Como usar constantes em C# Vimos no tópico anterior que variáveis podem ter seus valores alterados durante a execução do programa. Existe um tipo de variável que não permite que seu valor seja alterado após sua definição. Em C# esta variável é declarada com a palavra-chaveconst. Veja um exemplo de declaração e inicialização de uma constante cujo valor é um numero inteiro: const int idade = 30;

Vamos escrever um aplicativo que demonstra o que acontece quando tentamos alterar o valor de uma constante declarada e já inicializada: using System;

class Constantes

{

static void Main()

{

const int idade = 30;

idade = 45; // causa erro de compilação

Console.WriteLine("Idade: {0}", idade);

}

}

Salve esta listagem como Constantes.cs. Ao tentarmos compilar este código obtemos a seguinte mensagem de erro: Constantes.cs(9,5): error CS0131: The left-hand side of an assignment must be a

variable, property or indexer

Esta mensagem nos diz que o lado esquerdo de uma operação de atribuição deve ser uma variável, propriedade ou indexer. Propriedades e indexers serão vistos nas próximas partes do curso. Vamos escrever um aplicativo que demonstra o que acontece quando tentamos alterar o valor de uma constante declarada e já inicializada: using System;

class Constantes

{

static void Main()

{

const int idade = 30;

idade = 45; // causa erro de compilação

Console.WriteLine("Idade: {0}", idade);

}

}

Salve esta listagem como Constantes.cs. Ao tentarmos compilar este código obtemos a seguinte

mensagem de erro: Constantes.cs(9,5): error CS0131: The left-hand side of an assignment must be a

variable, property or indexer

Esta mensagem nos diz que o lado esquerdo de uma operação de atribuição deve ser uma variável, propriedade ou indexer. Propriedades e indexers serão vistos nas próximas partes do curso.

Vamos escrever um aplicativo que demonstra o que acontece quando tentamos alterar o valor de uma constante declarada e já inicializada: using System;

class Constantes

{

static void Main()

{

const int idade = 30;

idade = 45; // causa erro de compilação

Console.WriteLine("Idade: {0}", idade);

}

}

Salve esta listagem como Constantes.cs. Ao tentarmos compilar este código obtemos a seguinte mensagem de erro: Constantes.cs(9,5): error CS0131: The left-hand side of an assignment must be a

variable, property or indexer

Esta mensagem nos diz que o lado esquerdo de uma operação de atribuição deve ser uma variável, propriedade ou indexer. Propriedades e indexers serão vistos nas próximas partes do curso. Regras e dicas para a escolha de nomes de variáveis e constantes

Agora que você já sabe como usar variáveis e constantes em seus programas C#, é hora de aprender um pouco sobre as regras impostas pela linguagem em relação aos nomes que você poderia escolher para seus identificadores: a) O nome de um identificador pode conter apenas letras, dígitos e o caractere de sublinhado (_); b) O primeiro caractere deve obrigatoriamente ser uma letra. Ainda que o caractere de sublinhado seja permitido, seu uso não é recomendado devido ao fato de tornar o código mais difícil de ser entendido; c) O C# diferencia minúsculas de maiúsculas. Desta forma, CLIENTE, Cliente e cliente são identificadores distintos; d) Palavras-chave não podem ser usadas como identificadores. O tópico a seguir lista todas estas palavras em ordem alfabética.

Para reforçar estas regras veja uma lista de identificadores considerados válidos: int valor;

string _nomeCliente;

float ValorTotal;

double a3;

short numero_conta;

Os identificadores a seguir são considerados inválidos: string #nomeDoCliente;

float 1_Valor;

int $aumento;

Existe um consenso entre programadores e autores que os nomes de constantes devam ser escritos usando apenas letras maiúsculas. Essa pratica é comum nas linguagens C, C++ e Java. Com freqüência você verá este estilo de nomeação sendo aplicado também em C#. Fique à vontade para escolher seu estilo. As observações nestas próximas linhas não são exigências, mas, uma forma de estimular o leitor a se adequar ao estilo de programação de vários programadores experientes ao redor do mundo. A primeira observação é o uso de letras minúsculas para os nomes de variáveis. Esta pratica é comum nas linguagens C, C++ e Java. Se o nome da variável for composto de mais de uma

palavra, você pode adotar o que é conhecido como notaçãoCamel. Em tal notação o nome da variável seria nomeCliente (com a primeira palavra iniciando com letras minúsculas e as demais palavras iniciando com letras maiúsculas). Quando se trata de nomes de classes, métodos, interfaces e outros elementos da linguagem C#, é comum a adoção da notação Pascal. Neste estilo a inicial de cada palavra é escrita com letra maiúscula. Assim, uma classe que representa um relatório de vendas poderia ser nomeada RelatorioVendas. Este curso adota a notação Camel para variáveis e constantes e a notação Pascal para classes, interfaces e demais elementos. Palavras-chave e palavras reservadas da linguagem C#

Palavras-chave são palavras que têm um significado especial para o compilador. Palavras reservadas são palavras que não estão em uso agora, mas há a chance de que estas possam ser incluídas na linguagem posteriormente. Em todo caso, você não poderá usar nenhuma das palavras listadas abaixo para nomear variáveis e constantes em seus códigos. Esta lista de palavras-chave consta da documentação da linguagem C# presente no framework .NET versão 1.1.

abstract event new struct

as explicit null switch

base extern object this

bool false operator throw

break finally out true

byte fixed override try

case float params typeof

catch for private uint

char foreach protected ulong

checked goto public unchecked

class if readonly unsafe

const implicit ref ushort

continue in return using

decimal int sbyte virtual

default interface sealed volatile

delegate internal short void

do is sizeof while

double lock stackalloc

else long static

enum namespace string

Tipos de dados numéricos Agora que você já sabe como declarar variáveis e constantes, é hora de saber quais os tipos de dados que você pode usar eu seus aplicativos. Nos exemplos anteriores vimos que uma variável é declarada seguinte o modelo: Tipo_de_dados nome_da_variável

Em alguns de nossos exemplos aprendemos a declarar variáveis do tipo inteiro usando a palavra

chave int. int é parte de uma lista de tipos conhecidos como built-in types, ou seja, tipos de

dados pré-definidos na linguagem. Os tipos de dados em C# podem ser divididos em quatro categorias: integrais,números de ponto-flutuante, decimal e boolean. Na categoria dos tipos de dados integrais (tipos que não apresentam partes fracionárias) temos os constantes na tabela seguinte:

Tipo Faixa de Valores Tamanho

sbyte -128 até 127 8 bits

byte (sem sinal) 0 até 255 8 bits

char (unicode) U+0000 até U+ffff 16 bits

short -32.768 até 32.767 16 bits

ushort (sem sinal) 0 até 65.535 16 bits

int -2.147.483.648 até 2.147.483.647 32 bits

uint (sem sinal) 0 até 4.294.967.295 32 bits

long -9.223.372.036.854.775.808 até 9.223.372.036.854.775.807

64 bits

ulong (sem sinal) 0 até 18.446.744.073.709.551.615 64 bits

Com certeza o leitor deve estar se perguntando qual é a real necessidade de se conhecer a faixa de valores possíveis e a quantidade de bits ocupados por um determinado tipo de dados. E qual é a diferença entre um tipo sinalizado (sbyte) de um tipo não sinalizado (byte)? A razão pela qual este curso apresenta tais informações ficará clara à medida que você progredir com seus estudos, não somente da linguagem C#, como também de outras linguagens e técnicas de programação. O apêndice A "Sistemas de Numeração" mostra a você os passos necessários para converter valores entre os sistemas decimais, binário, octal e hexadecimal. Fique à vontade

para consultar este apêndice caso a explicação que faremos a seguir se torne um pouco confusa neste estágio do estudo. Inicialmente tomemos o valor 100 no sistema de numeração decimal. Convertendo este valor para o sistema de numeração binário temos 1100100. Suponha que decidíssemos armazenar este valor em uma variável do tipo sbyte (com sinal). Ora, como sabemos que este tipo de dados ocupa 8 bits, ou seja, 1 byte de memória, teríamos o cenário reproduzido na figura seguinte:

Lembre-se do cálculo: 64 + 32 + 4 = 100. Como podemos ver na figura, o bit mais significativo (na cor cinza) deste byte é usado para sinalizar se o valor é positivo ou negativo. Se o bit mais significativo for 0, valor é positivo. Se for 1, o valor é negativo. Então, como este bit tem essa função exclusiva para os tipos de dados sinalizados, resulta que teremos apenas 7 bits para armazenar os valores desejados. Assim, se tivermos todos estes 7 bits com valores 1 e apenas o bit mais significativo com o valor 0: 0111 1111

chegaremos à conclusão de que o valor máximo a ser armazenado é realmente 127 (64 + 32 + 16 + 8 + 4 + 2 + 1 = 127). Tomemos agora o tipo de dados byte (sem sinal). Como este tipo de dados só armazenará valores positivos, não há a necessidade de se usar o bit mais significativo como sinalizador. Em vez disso, ele é considerado parte dos bits de dados e voltamos novamente

a ter 8 bits à nossa disposição. Assim:

128 + 64 + 32 + 16 + 8 + 4 + 2 + 1 = 255 Com este cálculo provamos que o tipo byte pode realmente armazenar valores que variarão de 0 a 255. O mesmo cálculo pode ser usado para os outros tipos de dados. Experimente efetuar este processo com os tipos de dados short (aceita valores positivos e negativos) e ushort (aceita somente valores positivos). Voltemos nossa atenção agora para os tipos de dados capazes de armazenar números deponto-flutuante, ou seja, números que contêm partes fracionárias. C# fornece os tiposfloat e double. Veja suas características na tabela seguinte:

Tipo Faixa de Valores Precisão Tamanho

float 1.5x10-45 até 3.4x1038 7 dígitos 32 bits

double 5.0×10-324 até 1.7×10308 15-16 dígitos 64 bits

Para que você realmente entenda as faixas de valores e precisão dos tipos de dadosfloat e double, acrescentamos as seguintes observações: a) 1038 equivale a multiplicar o valor 10 por ele mesmo 37 vezes. O resultado será o numero 1 seguido de 38 zeros. 10-45 equivale a dividir o valor 10 por ele mesmo 44 vezes. O resultado será uma vírgula seguida pelo numero 1 precedido de 44 zeros. b) A precisão de um tipo de dados é a quantidade de dígitos que poderão ser representados como casas decimais, ou seja, a quantidade de dígitos significativos após a vírgula. Se o calculo

realizado exceder a quantidade de dígitos permitidos após a vírgula, haverá arredondamento para o inteiro mais próximo. Use o tipo de dados double quando você estiver realizando cálculos que exigem um pouco mais de precisão no tocante às casas decimais. O tipo de dados float é usado quando um possível arredondamento não trará resultados indesejados ao resultado final. Existe, no entanto, uma opção quando o cálculo exige uma precisão levada ao extremo, por exemplo, em aplicações financeiras. Para estes cálculos o C# nos fornece o tipo de dados decimal. Veja suas características na tabela seguinte:

Tipo Faixa de Valores Precisão Tamanho

decimal 1.0x10-28 até 7.9x1028 28 dígitos 128 bits

Os tipos de dados char, string e referência Na tabela dos tipos integrais (tipos que não suportam partes fracionárias) tivemos a inclusão do tipo de dados char. A inclusão deste tipo na tabela citada se dá por questões acadêmicas. Na verdade, se você tentar atribuir um valor numérico a um char, como no exemplo seguinte: char letra = 45;

você obterá, em tempo de compilação, a seguinte mensagem de erro: Char.cs(7,18): error CS0031: Constant value '45' cannot be converted to a 'char'

Esta mensagem nos diz que o valor 45 não pode ser convertido para um char. Uma alternativa é efetuar uma conversão explicita de dados usando um artifício conhecido como casting (e que será estudado mais adiante). Veja uma nova versão do exemplo anterior:

char letra = (char) 71;

Ao executar esta linha de código o valor 71 é convertido para o caractere Unicode correspondente e ele é atribuído à variável letra. Para que você veja o resultado, considere a listagem seguinte: using System; class Caractere {

static void Main()

{

char letra = (char) 71;

Console.WriteLine("A letra é: {0}", letra);

}

} Este código está disponível no arquivo Char.cs. Compile-o e, ao executa-lo você terá o seguinte resultado: A letra é: G

Caracteres em C# ocupam 16 bits (2 bytes). Isso quer dizer que seus programas poderão exibir caracteres cujos códigos variarão de 0 até 65.535, ou seja, os caracteres e símbolos da maioria das linguagens já conhecidas. O apêndice B "Conjunto de Caracteres ASCII" servirá como referência quando você precisar consultar o código decimal que representa um determinado caractere. O tipo de dados char é usado quando precisamos trabalhar com texto de forma separada, ou seja, um caractere por vez. Quando dois ou mais caracteres precisam ser representados, entra em cena um tipo de dados comum a quase todos os aplicativos já desenvolvidos. Este tipo de dados se chama string.

O tipo de dados string é um tipo de referência, ou seja, todas as vezes que uma variável deste tipo é declarada em seus programas, o que temos na verdade é uma referência a um objeto que encapsula um conjunto de caracteres. Mas, como objetos serão vistos mais adiante, vamos apenas escrever um exemplo que demonstra seu uso. Considere a listagem seguinte: using System;

class Leitura

{

static void Main()

{

string nome;

Console.WriteLine("Digite seu nome:");

nome = Console.ReadLine();

Console.WriteLine("Seu nome é: {0}", nome);

}

}

Compile este código e experimente executa-lo. Você verá uma mensagem solicitando que digite seu nome. Ao digitar seu nome e pressionar Enter uma nova mensagem confirma o valor informado. Vamos ver como isso aconteceu.

O primeiro passo foi declarar uma variável do tipo string: string nome;

Em seguida temos uma chamada ao método WriteLine da classe Console para exibir a mensagem que sugere a digitação do nome:

Console.WriteLine("Digite seu nome:");

O próximo passo é obter o valor que foi digitado. Isso é feito com o método ReadLine da classe Console, que atribui à variável nome, todo o conteúdo digitado pelo usuário antes de pressionar a tecla Enter: nome = Console.ReadLine();

Para finalizar exibimos o resultado: Console.WriteLine("Seu nome é: {0}", nome);

C# não aplica restrições à quantidade de caracteres que podem estar contidos em uma string. A documentação oficial nos informa que esta quantidade pode variar de 0 à 2 bilhões de caracteres

Unicode. Se sabemos que cada caractere ocupa 16 bits (2 bytes), então podemos afirmar que

nossas strings poderão ser tão longas quanto a memória principal disponível suportar. Antes de prosseguirmos tenha em mente que string é um tipo de dados referência a objetos. Outros tipos de referência são object, class, interface e delegate. Estes tipos serão apresentados mais adiante.

Entendendo o tipo de dados bool O tipo de dados bool é usado quando queremos atribuir apenas os valores true ou falsea uma variável. Uma contração da palavra boolean (presente em muitas linguagens), este tipo ocupa apenas um bit de memória e seu uso pode ser exemplificado na listagem seguinte: using System;

class Boolean

{

static void Main()

{

bool aprovado = true;

Console.WriteLine("Foi aprovado: {0}", aprovado);

}

}

Este código está disponível no arquivo Boolean.cs. Ao executá-lo temos o seguinte resultado: Foi aprovado: True

Experimente alterar o valor da variável aprovado para false e veja o resultado.

Literais Este tópico aborda literais e a importância de se entender e usar corretamente este recurso, presente em praticamente todas as linguagens de programação. Cabe, no entanto, uma observação. Você não precisa, obrigatoriamente, ler o conteúdo deste tópico antes de prosseguir com o estudo das demais partes. Mas, caso o faça, é importante escrever e compilar alguns exemplos a fim de entender o funcionamento de cada literal apresentado e observar o comportamento do compilador C# em algumas situações que passariam despercebidas aos olhos dos iniciantes em programação.

Um literal é um valor que definimos quando escrevemos nosso código, ou seja, é o oposto de um valor que poderia ser calculado e atribuído a uma variável em tempo de execução. Desta forma, estivemos usando literais na maioria dos exemplos apresentados até este momento. Observe o seguinte trecho de código:

bool aprovado = true;

Aqui true é um literal do tipo bool (boolean) sendo atribuído à variável aprovado. Outro exemplo

de literal poderia ser um literal string, mostrado a seguir: string site;

site = "Arquivo de Códigos";

Lembre-se de que um literal string pode conter seqüências de escape (ilustradas mais adiante neste tópico). Desta forma, podemos causar uma quebra de linha em uma string de forma bem fácil. Veja um exemplo:

string frase = "Número 1\nNúmero 2";

A saída deste exemplo será: Número 1

Número 2

Como podemos ver, uma quebra é causada pela inserção da seqüência "\n" no ponto onde desejamos que a quebra de linha ocorra.

Quando falamos de literais do tipo boolean e string, tudo é muito simples e sob controle. A atenção deve ser redobrada quando estamos lidando com literais integrais e deponto-flutuante. Comecemos com os literais integrais. Primeiramente veja o que acontece quando tentamos atribuir um valor maior que aquele permitido a um determinado tipo de dados: byte valor = 400;

Ora, como sabemos que o máximo valor que pode ser armazenado em uma variável do tipo byte é 255, é de se esperar que esta definição fosse rejeitada pelo compilador, uma vez que o literal 400 é no mínimo do tipo short. E é isso que acontece. Veja a mensagem de erro de compilação que

nos é exibida: Numero.cs(7,18): error CS0031: Constant value '400' cannot be converted to a 'byte'

Existem algumas regras bem fáceis de serem entendidas quando estamos lidando com literais integrais. Vamos a elas: 1) Literais integrais podem ser definidos em dois tipos de sistemas de numeração: decimal e hexadecimal. Para definir um literal integral em hexadecimal, seu valor deverá ser precedido pela seqüência "0x". Veja um exemplo:

int valor = 0x43;

Ao exibirmos o valor da variável usando a forma que já conhecemos, veremos que o valor exibido é 67, ou seja, o valor hexadecimal é convertido para decimal antes de ser exibido. Nos próximos capítulos você aprenderá como exibir valores de variáveis em hexadecimal usando as opções de formatação de string. 2) Se o valor do literal for maior que aquele suportado pelo tipo de dados da variável a qual este valor será atribuído, um erro de compilação ocorrerá. O maior valor definido para um literal

integral não poderá ser superior ao maior valor suportado pelo tipoulong. 3) Se o literal não possui sufixo, ele será do primeiro tipo que suportar seu valor, seguindo a ordem: int, uint, long, ulong. 4) Se o literal possui o sufixo U ou u, ele será do primeiro tipo que suportar seu valor, seguindo a ordem: uint, ulong. Lembre-se de que os sufixos U ou u são usados para definir um literal integral sem sinal. Veja um exemplo: uint valor = 143U;

5) Se o literal possui o sufixo L ou l (letra "L" minúscula), ele será do primeiro tipo que suportar seu valor, seguindo a ordem: long, ulong. Para facilitar a leitura do sufixo, encorajamos o uso apenas do sufixo L (a letra "L" minúscula se parece muito com o numero 1). Veja um exemplo deste tipo de literal: long valor = 623465L;

6) Se um literal possui os sufixos UL, Ul, uL, ul, LU, Lu, lU ou lu, ele será do tipo ulong.

Por ora você não encontrará nenhuma aplicação prática dos conceitos apresentados nesta parte do texto. Porém, procure, sempre que puder rever estas anotações. Elas serão muito úteis durante o seu desenvolvimento. Veja agora uma das situações clássicas de erro de compilação envolvendo literais. Observe o trecho de código a seguir: float valor = 6.2;

A primeira vista esta definição está correta. Temos um literal de ponto flutuante sendo atribuído a uma variável do tipo float. Porém, ao tentarmos a compilação obtemos a seguinte mensagem de

erro: Valores.cs(7,19): error CS0664: Literal of type double cannot be implicitly

converted to type 'float'; use an 'F' suffix to create a literal of this type

Esta mensagem de erro nos avisa que um literal do tipo double não pode ser implicitamente convertido para o tipo float. E sugere que usemos o sufixo F após o valor do integral. Façamos isso então:

float valor = 6.2F;

Ao tentar compilar o código novamente vemos que a mensagem de erro se foi. Desta experiência concluímos que: 1) Se o literal de ponto-flutuante não possuir sufixo, ou possuir os sufixos D ou d, ele será do tipo double. 2) Se o literal possuir os sufixos F ou f, ele será do tipo float. 3) Se o literal possuir os sufixos M ou m, ele será do tipo decimal.

De posse desta informação, nem precisamos de muito esforço para saber que o trecho de código: decimal valor = 40.5;

resultará em um erro de compilação, mesmo sabendo que uma variável do tipo decimalpode perfeitamente acomodar o valor de um literal do tipo double. Literais do tipo char podem ser definidos usando-se aspas simples em torno do caractere desejado. Veja um exemplo: char letra = 'A';

Outra forma de fornecer um valor a um literal char é usar valores inteiros na faixa que vai de 0 até 65.535 (lembre-se de que o tipo char ocupa 16 bits na memória e não possui sinal). Veja um exemplo: char letra = (char ) 104;

Esta técnica foi exemplifica no tópico "Os tipos de dados char, string e referência". Existe, no entanto, uma outra forma de atribuir valores a um literal char. Esta forma não é tão freqüente e consiste em atribuir ao literal o caractere desejado usando-se um valor hexadecimal que representa o valor Unicode do caractere. Este valor deverá ser precedido por "\n". Veja um exemplo: char letra = '\u0067';

Aqui o literal letra conterá a letra "g". O apêndice A "Sistemas de Numeração" mostrará a você como converter entre os sistemas de numeração decimais e hexadecimais.

Para finalizar vamos analisar as seqüências de escape disponíveis na linguagem C#. Veja a tabela a seguir:

Sequencia Nome do Caractere Valor Unicode

\' Aspas Simples 0x0027

\" Aspas Duplas 0x0022

\\ Barra Invertida 0x005C

\b Retrocesso 0x0008

\f Avanço de Página 0x000C

\n Nova Linha 0x000A

\r Voltar 0x000D

\t Tabulação Horizontal 0x0009

\v Tabulação Vertical 0x000B

Esta tabela de seqüências de escape tem sua importância compreendida quando precisamos exibir frases que contém aspas simples ou duplas. Por exemplo, se quiséssemos exibir a seguinte frase: Então ela falou: "Estou muito cansada"

A maneira usual seria escrever um trecho de código assim: string frase = "Então ela falou: "Estou muito cansada"";

Porém, ao tentarmos executar tal código temos uma mensagem de erro semelhante à mostrada a

seguir:

testes.cs(7,39): error CS1002: ; expected

testes.cs(7,51): error CS1002: ; expected

testes.cs(7,58): error CS1002: ; expected

Esta mensagem de erro não ajuda em nada. Mas, já sabemos o que fazer. Basta "escapar" as aspas internas. Veja como o código deve ser escrito:

string frase = "Então ela falou: \"Estou muito cansada\"";

Como usar corretamente o método Main com ou sem argumentos Todo programa C# tem um ponto de entrada, que é um método Main definido na classe principal, ou seja, a classe responsável por controlar o fluxo de execução do programa. Em todos os exemplos que escrevemos até este momento, vimos o método Main com a seguinte assinatura:

static void Main()

{

// mais linhas de código aqui

}

A palavra static é um modificador que pode ser usado com classes, métodos, variáveis, etc, e será abordado mais adiante. Apenas para que você não siga desinformado, saiba que um método definido com este modificador pode ser acessado sem que uma instância da classe na qual o método foi definido precise ser criada. A palavra void é usada para indicar que o método não retorna nenhum valor após a sua execução. Como você aprenderá mais adiante, métodos podem retornar todos os tipos de dados que estudamos, incluindo referencias a tipos de dados definidos pelo usuário. É comum em C# uma assinatura do método Main que retorna um inteiro. Veja um exemplo: using System;

class VoidPorInt

{

static int Main()

{

Console.WriteLine("Trocando void por int");

return 0;

}

}

Este código está disponível no arquivo VoidPorInt.cs. Veja que agora o método Mainretorna um valor inteiro. Observe também o uso da instrução return como ultima linha a ser executada. Em C e C++, ao retornarmos o valor 0 para o sistema operacional estamos informando-o que a execução e encerramento do programa ocorreu sem maiores problemas. Experimente agora

substituir int por void novamente. Ao tentar compilar o código você verá a seguinte mensagem de erro: VoidPorInt.cs(9,5): error CS0127: Since 'VoidPorInt.Main()' returns void, a return

keyword must not be followed by an object expression

Esta mensagem nos diz que, uma vez que o metodo Main está retornando void (nada), a palavra-chave return não deve ser seguida por uma expressão. Troque:

return 0;

por return;

e compile o código novamente. Você verá que agora a mensagem de erro não é exibida. Esta

experiência nos mostra que, quando um método define void como seu tipo de retorno, o compilador fará o possível para que esta regra seja obedecida. É possível usar o método Main para fornecer valores ao programa via linha de comando. Para tanto você deve usar a seguinte assinatura:

static void Main(string[] args)

{

// mais código aqui

}

Aqui nos temos um parâmetro para o método Main. Este parâmetro é um array do tipo string.

Arrays são estruturas de dados que consistem em itens de dados relacionados do mesmo tipo e indexados com valores inteiros maiores ou igual a 0. Os valores fornecidos na linha de comando são separados por espaços e acessados usando-se args[0], args[1], args[2] e assim por diante. Veja um exemplo onde o usuário informa seu primeiro nome e idade na linha de comando do programa: using System;

class LinhaComando

{

static void Main(string[] args)

{

Console.WriteLine("Seu primeiro nome é {0} e você

tem {1} anos", args[0], args[1]);

}

}

Este código está disponível no arquivo LinhaComando.cs. Após sua compilação experimente executa-lo usando os seguintes argumentos: LinhaComando Augusto 21

Você obterá o seguinte resultado: Seu nome é Augusto e você tem 21 anos

Experimente informar seu nome completo e a idade na linha de comando. Poderia ser algo assim: LinhaComando Augusto Santos de Souza 21

Após a execução você concordará comigo que o resultado não foi o que esperávamos. Mas pode ser contornado. Basta informar o nome completo entre aspas duplas. Assim:

LinhaComando "Augusto Santos de Souza" 21

Arrays e as técnicas usadas para evitar erros em tempo de execução, como aquele causado quando você tentar executar estes exemplos recentes sem fornecer valores na linha de comando, serão estudados mais adiante.

Introdução às interfaces gráficas do C# Até este ponto de nosso estudo, todos os resultados da execução de nossos exemplos foram exibidos no console, em modo texto. Acreditamos que este seja o momento adequado para fazermos uma introdução às capacidades gráficas do C#. O próximo programa mostrará a você como fazer uso da classe MessageBox (que está sob o namespace System.Windows.Forms) para exibir mensagens mais amigáveis em seus programas. Considere a listagem a seguir: using System.Windows.Forms;

class Mensagem

{

static void Main(string[] args)

{

string frase = "Este é um exemplo do uso da

classe MessageBox";

MessageBox.Show(frase, "Meu Aplicativo");

}

}

Este código está disponível no arquivo Mensagem.cs. Compile-o e experimente executá-lo. Você a seguinte caixa de mensagem:

O método Show da classe MessageBox possui uma grande variedade de parâmetros. Para este exemplo escolhemos os parâmetros que permitem definir os textos para a mensagem e para o título da caixa de mensagem: MessageBox.Show(string text, string caption)

Como exercício recomendamos que você investigue os demais parâmetros deste método na documentação da plataforma .NET.

Dicas & Truques C# static void Main(string[] args)

{

// cria e inicializa um array de strings

string[] cidades = {"Goiânia", "São Paulo",

"Rio de Janeiro", "Curitiba"};

Console.WriteLine("Ordem original:");

for (int i = 0; i < cidades.Length; i++)

Console.WriteLine(cidades[i]);

StringComparer ordenar = StringComparer.CurrentCultureIgnoreCase;

Array.Sort(cidades, ordenar);

Console.WriteLine();

Console.WriteLine("Ordem alfabética:");

for (int i = 0; i < cidades.Length; i++)

Console.WriteLine(cidades[i]);

// pausa o programa

Console.ReadKey();

}

Palavras-chaves: de, o, =, ordenar, ; , args, alfabética, original, e, int, strings , , WriteLine, Sort, programa , Paulo", pausa, , cria, <, inicializa, Console, Main, ; , ", 0;, cidades, StringComparer, Array, ReadKey, "Ordem, CurrentCultureIgnoreCase; , void, "Rio, "Goiânia", Length;, i++, array, i, "São, "Curitiba", string, Janeiro",

um, for, static

Como criar, atribuir valores e percorrer um array de duas dimensões em

C#

static void Main(string[] args)

{

// cria um array de duas dimensões: 4 linhas

// e duas colunas

int[,] matriz = new int[4, 2];

// atribui o valor 15 para a célula na

// primeira linha e primeira coluna

matriz[0, 0] = 15;

// atribui o valor 30 para a célula na

// quarta linha e segunda coluna

matriz[3, 1] = 30;

// imprime a matriz

for (int i = 0; i <= matriz.GetUpperBound(0); i++)

{

for (int y = 0; y <= matriz.GetUpperBound(1); y++)

{

Console.Write(matriz[i, y] + " ");

}

Console.WriteLine();

}

// pausa o programa

Console.ReadKey();

}

Palavras-chaves: imprime, na , programa , 30; , +, Write, ; , pausa, primeira, quarta, args, 15; , 2, int, o, um, array, linhas , duas, e, i++, 1, 0, coluna , matriz, , 15, i, ; , valor, para, 4, ;, GetUpperBound, linha, <=, , WriteLine, Main, string, colunas , a, new, , de, 0;, ", segunda, 30, matriz , atribui, y++, static, dimensões, void, =, for, cria, ReadKey, y, 3, Console, célula

Como escrever um método C# que retorna um array (matriz)

Em algumas situações precisamos escrever um método C# que retorna uma matriz. Esta dica mostra como isso pode ser feito:

static void Main(string[] args){

// vamos obter um array do método abaixo

int[] valores = obterValores();

// vamos imprimir o conteúdo do array obtido

for(int i = 0; i < valores.Length; i++){

System.Console.WriteLine(valores[i]);

}

// pausa o programa

System.Console.Write("\nPressione qualquer tecla para sair...");

Console.ReadKey();

}

static int[] obterValores(){

// vamos criar um array de cinco inteiros

int[] matriz = {1, 2, 3, 4, 5};

// vamos retornar este array para o chamador deste método

return matriz;

}

Palavras-chaves: args, , 5, algumas, ", este, 1, 4, Como, criar, int, programa , static, cinco, pode, Main, Em, de, precisamos, , tecla, matriz, ; , para, matriz; , return, do, que, isso, 2, abaixo , obtido , array, Length;, método , obter, <, imprimir, como, escrever, deste, retorna, pausa, sair, chamador, mostra, 3, uma, =, Esta, retornar, 0;, ; , ReadKey, o, static, for, obterValores, qualquer, void, feito, i, System, inteiros , string, vamos, > , um, Write, ser, situações, i++, C#, valores, método, Pressione, WriteLine, >

Como inverter a ordem dos elementos de um array static void Main(string[] args)

{

// cria e inicializa um array de strings

string[] cidades = {"Goiânia", "São Paulo",

"Rio de Janeiro", "Curitiba"};

Console.WriteLine("Ordem original:");

for (int i = 0; i < cidades.Length; i++)

Console.WriteLine(cidades[i]);

// inverte a ordem dos elementos

Array.Reverse(cidades);

// exibe os elementos na ordem inversa

Console.WriteLine();

Console.WriteLine("Ordem inversa:");

for (int i = 0; i < cidades.Length; i++)

Console.WriteLine(cidades[i]);

// pausa o programa

Console.ReadKey();

}

Palavras-chaves: <, =, static, Main, Janeiro", inversa , programa , elementos , for, , Paulo", dos, Console, inversa, a, Length;, array, na, string, ; , os, "Curitiba", exibe, strings , um, o, args, inicializa, "Goiânia", elementos, i, "São, ", original, Reverse, "Ordem, "Rio, inverte, i++, cidades, ordem, ReadKey, cria, e, , void, pausa,

Array, 0;, de, ; , WriteLine, int

Aprenda a declarar e usar variáveis em C#

Aprenda a declarar e usar variáveis em C# Variáveis são apelidos que damos aos blocos de memória que podem ser usados para armazenar dados durante a execução de um programa. Podemos guardar informações dos mais variados tipos em variáveis, a saber: valores inteiros, valores de número flutuante (com casas decimais), palavras, frases, textos e até mesmo referências a objetos de classes (fornecidas pela linguagem C# ou nossas próprias). Uma variável é declarada, em sua forma mais simples, informando o tipo de dados (int, float, double, string, etc) e então o nome da variável. Veja: // uma variável usado para armazenar um valor inteiro

int valor;

Uma vez declarada a variável, podemos definir o valor que será armazenado inicialmente. Isso é chamado de "atribuir um valor inicial à variável". Veja: static void Main(string[] args){

// declara e inicializa uma variável do tipo double

double salario = 2345.32;

// exibe o valor da variável

Console.WriteLine("Salário: {0}", salario);

Console.WriteLine("\n\nPressione uma tecla para sair...");

Console.ReadKey();

}

É possível declarar mais de uma variável do mesmo tipo. Basta separá-las por vírgulas. Veja: // declara três variáveis do tipo char

char a, b, c;

Variáveis são realmente úteis quando as estamos usando em cálculos ou outras operações importantes para o correto funcionamento do programa. Veja: static void Main(string[] args){

// declara três variáveis do tipo int

int a, b, soma;

// inicializa as duas primeiras variáveis

a = 20;

b = 10;

// inicializa a terceira variável usando os valores

// das duas anteriores

soma = a + b;

// exibe o resultado

Console.WriteLine("Resultado: {0}", soma);

Console.WriteLine("\n\nPressione uma tecla para sair...");

Console.ReadKey();

}

Para finalizar, lembre-se de uma variável C# possui atributos importantes e que devem ser lembrados com frequencia durante o planejamento de suas aplicações. Alguns destes atributos são: tipo, nome, valor, posição na memória, escopo (global ou local) e visibilidade (pública ou privada).

Palavras-chaves: int , planejamento, cálculos, damos, das, quando, sair, b; , ; , na, , finalizar, dados, visibilidade, b, número, inicialmente, saber, palavras, local, atributos, informando, as, operações, guardar, e, declarar, c; , da, aos, estamos, durante, realmente, variável , dos, importantes, salario, variados, Variáveis, lembrados, valor; , com, usar, Basta, Isso, flutuante, "Resultado, definir, etc, variável, Aprenda, apelidos, primeiras, separá-las, , possui, variáveis , inteiros, vírgulas, vez, um, posição, ", será, fornecidas, ReadKey, valores, double, programa, nome, tecla, sua, Para, usados, Veja, resultado , valores , soma; , aplicações, WriteLine, blocos, char char, 20; , float, outras, informações, "atribuir, casas, 0, valor, Console, double , lembre-se, É, inicializa, mesmo, declarada, por, anteriores , três, tipo, args, de, duas, referências, Main, frequencia, exibe, simples, linguagem, o, decimais, podem, declara, então, Uma, devem, tipos, global, a, uma, inicial, é, à, execução, nossas, ou, escopo, , que, soma, static, int, mais, Pressione, forma, até, os, próprias,

Podemos, suas, do, pública, 10; , 2345, objetos, chamado, +, void, memória, inteiro int, privada, podemos, variáveis, classes, ser, úteis, pela, destes, correto, variável", armazenar, funcionamento, em, terceira, frases, C#, para, textos, ; , usado, "Salário, Alguns, string, são, =, possível, armazenado, 32; , usando

Comandos básico GNU_Linux

Comandos de Controlo e Acesso

exit Terminar a sessão, ou seja, a shell (mais ajuda digitando man sh ou man csh)

logout Deslogar, ou seja, terminar a sessão actual, mas apenas na C shell e na bash shell

passwd Mudar a password do nosso utilizador

rlogin Logar de forma segura noutro sistema Unix/Linux

ssh Sessão segura, vem de secure shell, e permite-nos logar num servidor através do protocolo ssh

slogin Versão segura do rlogin

yppasswd Mudar a password do nosso utilizador nas páginas amarelas (yellow pages)

Comandos de Comunicações

mail Enviar e receber emails

mesg Permitir ou negar mensagens de terminal e

pedidos de conversação (talk requests)

pine Outra forma de enviar e receber emails, uma

ferramenta rápida e prática

talk Falar com outros utilizadores que estejam logados

no momento

write Escrever para outros utilizadores que estejam

logados no momento

Comandos de Ajuda e Documentação

apropos Localiza comandos por pesquisa de palavra-chave

find Localizar ficheiros, como por exemplo: find . -

name *.txt -print, para pesquisa de ficheiros de

texto por entre os ficheiros da directoria actual

info Lança o explorador de informações

man Manual muito completo, pesquisa informação

acerca de todos os comandos que necessitemos

de saber, como por exemplo man find

whatis Descreve o que um determinado comando é

whereis Localizar a página de ajuda (man page), código

fonte, ou ficheiros binários, de um determinado

programa

Comandos de Edição de Texto

emacs Editor de texto screen-oriented

pico Editor de texto screen-oriented, também chamado

de nano

sed Editor de texto stream-oriented

vi Editor de texto full-screen

vim Editor de texto full-screen melhorado (vi

improved)

Comandos de Gestão de Ficheiros e Directorias

cd Mudar de directoria actual, como por exemplo cd

directoria, cd .., cd /

chmod Mudar a protecção de um ficheiro ou directoria,

como por exemplo chmod 777, parecido com

oattrib do MS-DOS

chown Mudar o dono ou grupo de um ficheiro ou

directoria, vem de change owner

chgrp Mudar o grupo de um ficheiro ou directoria

cmp Compara dois ficheiros

comm Selecciona ou rejeita linhas comuns a dois

ficheiros seleccionados

cp Copia ficheiros, como o copy do MS-DOS

crypt Encripta ou Desencripta ficheiros (apenas CCWF)

diff Compara o conteúdo de dois ficheiros ASCII

file Determina o tipo de ficheiro

grep Procura um ficheiro por um padrão, sendo um

filtro muito útil e usado, por exemplo um cat a.txt

| grep ola irá mostrar-nos apenas as linhas do

ficheiro a.txt que contenham a palavra “ola”

gzip Comprime ou expande ficheiros

ln Cria um link a um ficheiro

ls Lista o conteúdo de uma directoria, semelhante ao

comando dir no MS-DOS

lsof Lista os ficheiros abertos, vem de list open files

mkdir Cria uma directoria, vem de make directory”

mv Move ou renomeia ficheiros ou directorias

pwd Mostra-nos o caminho por inteiro da directoria em

que nos encontramos em dado momento, ou seja

apathname

quota Mostra-nos o uso do disco e os limites

rm Apaga ficheiros, vem de remove, e é semelhante

ao comando del no MS-DOS, é preciso ter cuidado

com o comando rm * pois apaga tudo sem

confirmação por defeito

rmdir Apaga directorias, vem de remove directory

stat Mostra o estado de um ficheiro, útil para saber por

exemplo a hora e data do último acesso ao

mesmo

sync Faz um flush aos buffers do sistema de ficheiros,

sincroniza os dados no disco com a memória, ou

seja escreve todos os dados presentes

nos buffersda memória para o disco

sort Ordena, une ou compara texto, podendo ser

usado para extrair informações dos ficheiros de

texto ou mesmo para ordenar dados de outros

comandos como por exemplo listar ficheiros

ordenados pelo nome

tar Cria ou extrai arquivos, muito usado como

programa de backup ou compressão de ficheiros

tee Copia o input para um standard output e outros

ficheiros

tr Traduz caracteres

umask Muda as protecções de ficheiros por defeito

uncompress Restaura um ficheiro comprimido

uniq Reporta ou apaga linhas repetidas num ficheiro

wc Conta linhas, palavras e mesmo caracteres num

ficheiro

Exibição ou Impressão de Ficheiros

cat Mostra o conteúdo de um ficheiro, como o

comando type do MD-DOS, e é muito usado

também para concatenar ficheiros, como por

exemplo fazendo cat a.txt b.txt > c.txt” para

juntar o ficheiro a.txt e b.txt num único de nome

c.txt

fold Encurta, ou seja, faz um fold das linhas longas

para caberem no dispositivo de output

head Mostra as primeiras linhas de um ficheiro, como

por exemplo com head -10 a.txt, ou usado como

filtro para mostrar apenas os

primeiros x resultados de outro comando

lpq Examina a spooling queue da impressora

lpr Imprime um ficheiro

lprm Remove jobs da spooling queue da impressora

more Mostra o conteúdo de um ficheiro, mas apenas um

ecrã de cada vez, ou mesmo output de outros

comandos, como por exemplo ls | more

less Funciona como o more, mas com menos features,

menos características e potenciais usos

page Funciona de forma parecida com o comando more,

mas exibe os ecrãs de forma invertida ao

comandomore

pr Pagina um ficheiro para posterior impressão

tail Funciona de forma inversa ao comando head,

mostra-nos as últimas linhas de um ficheiro ou

mesmo do output de outro comando, quando

usado como filtro

zcat Mostra-nos um ficheiro comprimido

xv Serve para exibir, imprimir ou mesmo manipular

imagens

gv Exibe ficheiros ps e pdf

xpdf Exibe ficheiros pdf, usa o gv

Comandos de Transferência de Ficheiros

ftp Vem de file transfer protocol, e permite-nos,

usando o protocolo de transferência de

ficheirosftp, transferir ficheiros entre

vários hosts de uma rede, como aceder a um

servidor de ftp para enviar ou puxar ficheiros

rsync Sincroniza de forma rápida e flexível dados entre

dois computadores

scp Versão segura do rcp

Comandos de Notícias ou Rede

netstat Mostra o estado da rede

rsh Corre umam shell em outros sistemas UNIX

ssh Versão segura do rsh

nmap Poderoso port-scan, para visualizarmos portas

abertas num dado host

ifconfig Visualizar os ips da nossa máquina, entre outras

funções relacionadas com ips

ping Pingar um determinado host, ou seja, enviar

pacotes icmp para um determinado host e medir

tempos de resposta, entre outras coisas

Comandos de Controlo de Processos

kill Mata um processo, como por exemplo kill -kill

100ou kill -9 100 ou kill -9 %1

bg Coloca um processo suspenso em background

fg Ao contrário do comando bg, o fg traz de volta um

processo ao foreground

jobs Permite-nos visualizar jobs em execução, quando

corremos uma aplicação em background,

poderemos ver esse job com este comando, e

termina-lo com um comando kill -9 %1, se for

o jobnúmero 1, por exemplo

top Lista os processos que mais cpu usam, útil para

verificar que processos estão a provocar um uso

excessivo de memória, e quanta percentagem

decpu cada um usa em dado momento

^y Suspende o processo no próximo pedido de input

^z Suspende o processo actual

Comandos de Informação de Estado

clock Define a hora do processador

date Exibe a data e hora

df Exibe um resumo do espaço livre em disco

du Exibe um resumo do uso do espaço em disco

env Exibe as variáveis de ambiente

finger Pesquisa informações de utilizadores

history Lista os últimos comandos usados, muito útil para

lembrar também de que comandos foram usados

para fazer determinada acção no passado ou o

que foi feito em dada altura

last Indica o último login de utilizadores

lpq Examina a spool queue

manpath Mostra a path de procura para as páginas do

comando man

printenv Imprime as variáveis de ambiente

ps Lista a lista de processos em execução, útil para

saber o pid de um processo para o mandar abaixo

com o comando kill, entre outras coisas

pwd Mostra-nos o caminho por inteiro da directoria em

que nos encontramos em dado momento, ou seja

apathname

set Define variáveis da sessão, ou seja, da shell, na C

shell, na bash ou na ksh

spend Lista os custos ACITS UNIX até à data

time Mede o tempo de execução de programas

uptime Diz-nos há quanto tempo o sistema está

funcional, quando foi ligado e o seu uptime

w Mostra-nos quem está no sistema ou que

comando cada job está a executar

who Mostra-nos quem está logado no sistema

whois Serviço de directório de domínios da Internet,

permite-nos saber informações sobre

determinados domínios na Internet, quando um

domínio foi registado, quando expira, etc

whoami Diz-nos quem é o dono da shell

Comandos de Processamento de Texto

abiword Processador de Texto Open Source

addbib Cria ou modifica bases de dados bibliográficas

col Reverte o filtro a line feeds

diction Identifica sentenças com palavras

diffmk Marca diferenças entre ficheiros

dvips Converte ficheiros TeX DVI em ficheiros PostScript

explain Explica frases encontradas pelo programa diction

grap Preprocessador pic para desenhar gráficos, usado

em tarefas elementares de análises de dados

hyphen Encontra palavras com hífenes

ispell Verifica a ortografia de forma interactiva

latex Formata texto em LaTeX, que é baseado no TeX

pdfelatex Para documentos LaTeX em formato pdf

latex2html Converter LaTeX para html

lookbib Encontra referências bibliográficas

macref Cria uma referência cruzada listando ficheiros de

macros nroff/troff

ndx Cria uma página de indexação para um

documento

neqn Formata matemáticas com nroff

nroff Formata texto para exibição simples

pic Produz simples imagens para troff input

psdit Filtra um output troff para a Apple LaserWriter

ptx Cria uma indexação permutada mas não em CCWF

refer Insere referências de bases de dados

bibliográficas

roffbib Faz o run off de uma base de dados bibliográfica

sortbib Ordena uma base de dados bibliográfica

spell Encontra erros de ortografia

style Analisa as características superficiais de um

documento

tbl Formata tabelas para nroff/troff

tex Formata texto

tpic Converte ficheiros pic source em comandos TeX

wget Permite-nos fazer o download completo de

páginas web, com todos os ficheiros, de forma

fácil e não interactiva, sem exigir por isso

presença do utilizador, respeitando também o

ficheirorobots.txt

Web

html2ps Conversor de html para ps

latex2html Conversor de LaTeX para html

lynx Navegador web baseado em modo de texto, ou

seja, é um web browser que nos permite abrir

todo o tipo de páginas visualizando apenas os

textos elinks, não vendo assim as imagens, e

sendo por isso bastante rápido, mas requere

prática para ser manuseado

netscape Navegador web da Netscape

sitecopy Aplicação que nos permite manter facil e

remotamente web sites

weblint Verificador de sintaxes e de estilos html