Вы находитесь на странице: 1из 27

Curso - iOS SDK

Desenvolvimento
Felipe FK Kellermann - @felipek
Nyvra
C com pitadas de
Objective-C
Sobre Objective-C e C
Formato: .h e .c, #include (pr-processador)
Tipos primitivos e operaes
Funes e Blocos (#include, etc)
Expresses booleanas e fluxos / condicionais
Tipos com struct e enum, definies typedef
Ponteiros
Strings C e formatadores
Sobre C e
Objective-C
Pergunta: Precisa aprender C antes de Objective-C?
Resposta: Objective-C C!
A linguagem Objective-C foi concebida como um
super-conjunto estrito da linguagem C. Significa que
qualquer programa C um programa Objective-C

Na prtica, as adies de sintaxe so mnimas. Foi


adicionado um suporte leve a OO e relacionados
Sobre C
Muito prxima da linguagem de mquina
Criada por Kernighan & Ritchie em uma poca de
recursos muito limitados, na dcada de 70

Uma das linguagens de maior influncia na histria,


servindo de referncia (ou base) para uma grande
quantidade de linguagens at hoje - C#, Java, C++, ...

Sintaxe simples, paradigma imperativo/procedural


Formato: .c e .h,
#include e PP
Programas C so divididos tradicionalmente em
arquivos .c e .h (implementao e header)

Esquema mantido em Objective-C: .m e .h


Oumapr-processador (diretivas #xxx) simplesmente faz
juno de tudo atravs do #include

APIs expem seus recursos atravs da definio de


arquivos header (implementao fechada ou aberta)
Exemplo
Ol mundo!

Verificar ambiente (Xcode)


Execuo, Debug, etc
Entry point
A funo main especial, o entry point
Tem sempre o mesmo formato
O argc o contador de argumentos
O argv uma lista de ponteiros/strings (argumentos)

int main(char argv, char *argv[])

No caso de Objective-C, com Cocoa, tambm vai


existir um main, mas existiro outras abstraes
Tipos primitivos
Tanto C quanto Objective-C so linguagens tipadas
Os tipos primitivos geralmente representam dados
pequenos (8, 16, 32, 64 bits) suportados diretamente
pelo computador (processador/arquitetura)
Tipo Tamanho
char 8 bits
short 16 bits
int / long 32 ou 64 bits
float / double 32 bits
bool / BOOL 8 bits
Modificadores de
tipos importantes
Alguns modificadores podem ser usados na
definio de variveis. Modificam como o tipo
usado ou armazenado

unsigned (por padro todos so signed) na o


tipo um tipo sem sinal (unsigned long)
const: varivel que no pode (ou no deveria) ser
alterada - comum ser usada em referncias que
so recebidas por funes
static: varivel sobrevive fora do escopo definido
Operaes
Existem operaes que podem ser feitas nos tipos
primitivos. No existe sobrecarga de operadores, e
portanto operaes so apenas em primitivos
Operao Explicao
A = B Atribuio
A + B Soma
A - B Subtrao
A / B Diviso
A % B Resto (mdulo)
A * B Multiplicao
A++ e ++A Pr e ps-incremento
A-- e --A Pr e ps-decremento
+A e -A Troca de sinal
Funes
Com ou sem argumentos. Tipo opcional de retorno,
sendo void sem retorno. Existe a possibilidade de
argumentos variveis (...), um pouco mais raro. O
{} define escopo (como qualquer outro contexto)
// Funo dobro
float dobro(float valor)
{
float res = valor * 2.0;
return res;
}
Expresses
booleanas e fluxos
Expresses booleanas, Objective-C == C
Expresso Descrio
A && B E lgico
A || B OU lgico
! A Negao de
> Maior que
< Menor que
A >= B Maior ou igual a
A <= B Menor ou igual a
A != B Diferente de
A == B Igual a
Fluxos: for while do
Os fluxos so iguais entre C e Objective-C
Pequena adio de um novo for em Objective-C
break pode ser usado para interromper o lao
for (int i = 0; i < 32; i++) {
printf(Contando o valor de i\n);
}
while (i < 32) {
printf(Contando o valor de i\n);
i++;
}
do {
printf(Contando o valor de i\n, i);
i++;
} while (i > 32)
Fluxos: if else switch
Condicionais so iguais entre C e Objective-C
if (i < 32) {
printf(Valor menor que 32\n);
} else if (i < 100) {
printf(Valor menor que 100\n);
printf(Valor maior que 32\n);
} else {
printf(Valor desconhecido\n);
}
Fluxos: if else switch
Condicionais so iguais entre C e Objective-C
O switch limitado (e rpido)
switch (i) {
case 3:
printf(Valor igual a 3\n);
break;
case 8:
printf(Valor igual a 8\n);
printf(O valor par\n);
break;
default:
printf(Valor desconhecido!\n);
break;
}
Exemplo
Fluxos e Condicionais
Conta at 100. Imprime algo em mltiplos de 10,
imprime um Ol em 15, 35 e 42.

Imprimir: printf ou NSLog


Tipos struct, enum
O struct agrega outros tipos (incluindo structs)
Membros acessados atravs da notao .
struct produto
{
int codigo;
float peso;
};

struct produto p;
p.codigo = 10;
p.peso = 2.25;
Tipos struct, enum
O enum facilita a leitura atravs de constantes
Na prtica, trata-se apenas de um int com nomes
As constantes podem ter valores definidos ( comum
o uso de definies/manipulaes bitwise em enums)
enum
{
BEBIDA,
CARNE,
FRUTA
} tipo_produto;

enum tipo_produto tipo = CARNE;


if (tipo == BEBIDA) {
printf( uma bebida\n);
}
typedef
Novos tipos costumam ser definidos atravs da
diretiva typedef. Um tipo typedef apenas um
atalho para algum tipo (primitivo, struct, enum, etc)
typedef struct
{
int codigo;
float peso;
} produto_t;

produto_t p;

p.codigo = 42;
p.peso = 1.25;
Exemplo
Struct, Enum, Typedef
Criar uma Struct Tamanho (largura e altura), um
Enum Perfil (aluno e professor) e um Typedef
para Tamanho e Perfil
Arrays
Os assuntos arrays e ponteiros esto relacionados
Em C (e Objective-C) um array nativo de um tipo
Uso da sintaxe de acesso de notao []
Existiro arrays [] Objective-C no 4.4!
float precos[10];
precos[0] = 1.25;
precos[9] = 1.50;

// Quinto valor.
quinto = precos[4];

// Acesso invlido!
precos[10] = 2.30;
Ponteiros
Uma varivel ponteiro guarda referncia de memria
Um ponteiro tem sempre o mesmo tamanho
Tamanho suficiente para armazenar um endereo
Notao * define/acessa ponteiro, & pega endereo
// Varivel normal.
int x = 10;

// Ponteiro (y) aponta para x


int *y = &x;

// Acessa/altera contedo apontado


*y = 12;
Ponteiros, passagem
Em funes, em C, a passagem sempre por valor
Ocorre que s vezes o valor de um ponteiro
void troca_valores(int *a, int *b)
{
int temp = *a;
*a = *b;
*b = temp;
}

int x = 10;
int y = 12;

troca_valores(&x, &y);
Ponteiros
Ponteiros void * armazenam qualquer ponteiro
(esse tipo de coisa possvel pois qualquer ponteiro
tem o mesmo tamanho em um computador)
O ponteiro NULL especial, ponteiro invlido
Memria de x
int x = 30;
int *y = &x; 30 *y
int *z = &x;

*z
Strings C
Uma string no um tipo primitivo
Em C uma string um array de chars terminado por
um delimitador \0 (conhecido como NUL-byte)
Diferena importante: e
Toda a manipulao feita por funes
printf(Uma string qualquer\n);

char *nome = Felipe Kellermann;


// A letra K: nome[7]

char curso[] = Desenvolvimento iOS


curso[0] = d;
curso[15] = \0;
Formatadores
As bibliotecas e frameworks em C e Objective-C
suportam o conceito de formatador de string. Uma
das funes que suporta formatao a printf
Alguns exemplos de formatadores comuns
Formatador Descrio

%s char * (aka string)

%d int (inteiro)

%f (formatao, ex.: %.2f) float


Exemplo
Ponteiro, tipo primitivo,
mostrando valores
Criar uma string Objective-C para nome, um
inteiro (primitivo) para idade, mostrar os valores
atravs do console

Вам также может понравиться