Subscribe Twitter Twitter

lunes, 2 de agosto de 2010

Programación desde cero: Variables

El concepto de variable es muy usado en el mundo de la programación y aunque al principio de meterte en este mundillo te suene a chino es un concepto muy sencillo.

Una variable es en realidad un dato, éste dato puede ser por ejemplo una cadena de texto, un número entero,un número decimal o tipo de dato booleano (verdadero o falso) pero de alguna manera tenemos que hacer referencia a este dato que tenemos, para ello usamos un nombre.

Por ejemplo imaginemos que tenemos un dato referente a una edad, la edad va a ser 27 ¿cómo almacenamos ese dato? pues para ello declaramos una variable denominada miEdad, el tipo de dato es entero y el valor va a ser 27.

Sin entrar en un lenguaje de programación concreto sería algo tal que así:

Entero miEdad;
miEdad=27;


En la primera línea hemos declarado el tipo de dato que va a almacenar la variable miEdad que va a ser un dato de tipo entero.
En la segunda línea por el contrario hemos dado el valor a la variable, como es el primer valor que se asigna, normalmente se dice que lo hemos inicializado a 27.

Te preguntarás que pasará si intentamos acceder al valor que tenga miEdad antes de ser inicializado, depende el lenguaje puede dar un error o devolver null.

Hay lenguajes de programación que permiten hacer ambas cosas en una línea de la siguiente manera:

Entero miEdad = 27;

Nota: Los atributos a los que hacíamos referencia en el post de Objetos son en realidad variables pero que dan información a cerca de un objeto por lo que se llaman atributos.

Foro de Iphone Programación

Debido al gran número de correos con preguntas que hemos recibido, muchas en los comentarios de los blogs y que en muchos casos se repiten nos ha parecido muy buena idea crear un foro para centralizarlo todo y de esa manera aprender todos mejor :)

Espero vuestros posts!!!!

www.foroiphoneprogramacion.com

Si detectáis cualquier error o queréis comentarnos algo, sugerencias... ya sabéis!!!

pynsoftware@gmail.com

Sentencias iterativas en objetive-C: Bucle FOR

¿Cuándo usarlo?

Este tipo de bucle se usa siempre y cuando conocemos el número de veces que se va a ejecutar un determinado código.

Sintaxis

for (inicialización del contador (1); condición de ejecución (2); actualización del contador(3)){

// Código a ejecutar

}

Secuencia de ejecución

1. Se inicializa el contador (1).
2. Se comprueba que el contador cumple la condición de ejecución(2).
2.1 Si cumple la condición se ejecuta el código a ejecutar y se actualiza el contador(3) y volvemos al paso 2.
2.2 Si no cumple la condición se sale del bucle for.

Ejemplo básico:

for (int i=0; i<10;i++) contador =" %d\n">

2010-08-02 02:22:27.912 pruebas[910:207] Contador = 0

2010-08-02 02:22:27.914 pruebas[910:207] Contador = 1

2010-08-02 02:22:27.915 pruebas[910:207] Contador = 2

2010-08-02 02:22:27.915 pruebas[910:207] Contador = 3

2010-08-02 02:22:27.916 pruebas[910:207] Contador = 4

2010-08-02 02:22:27.917 pruebas[910:207] Contador = 5

2010-08-02 02:22:27.918 pruebas[910:207] Contador = 6

2010-08-02 02:22:27.918 pruebas[910:207] Contador = 7

2010-08-02 02:22:27.919 pruebas[910:207] Contador = 8

2010-08-02 02:22:27.920 pruebas[910:207] Contador = 9



Notas:
Se puede declarar el contador fuera de la inicialización del contador.
La actualización del contador puede tomar diferentes formas:
- Incrementar: i++
- Decrementar: i--
- Cualquier otro tipo de modificación es válido, por ejemplo si queremos que se actualice de dos en dos sería de la siguiente manera: i = i + 2

Otro ejemplo:

for (int i=0; i<=10; i=i+2) { NSLog(@"Contador = %d\n",i); }

2010-08-02 02:22:27.920 pruebas[910:207] Contador = 0

2010-08-02 02:22:27.921 pruebas[910:207] Contador = 2

2010-08-02 02:22:27.921 pruebas[910:207] Contador = 4

2010-08-02 02:22:27.922 pruebas[910:207] Contador = 6

2010-08-02 02:22:27.922 pruebas[910:207] Contador = 8

2010-08-02 02:22:27.923 pruebas[910:207] Contador = 10


Otro ejemplo:

for (int i=1; i<30; i="i*3)" contador =" %d\n">

2010-08-02 02:22:27.923 pruebas[910:207] Contador = 1

2010-08-02 02:22:27.924 pruebas[910:207] Contador = 3

2010-08-02 02:22:27.925 pruebas[910:207] Contador = 9

2010-08-02 02:22:27.925 pruebas[910:207] Contador = 27


Ejemplo usando como contador un carácter:

Como ves no es necesario usar un contador de tipo entero para el bucle for.

for (char i='b'; i<'f';i++) { NSLog(@"Letra = %c\n",i); }


2010-08-02 02:22:27.923 pruebas[910:207] Contador = b

2010-08-02 02:22:27.924 pruebas[910:207] Contador = c

2010-08-02 02:22:27.925 pruebas[910:207] Contador = d

2010-08-02 02:22:27.925 pruebas[910:207] Contador = e


Otra versión:

for (char i='b'; i<'l';i=i+2) { NSLog(@"Letra = %c\n",i); }

2010-08-02 02:22:27.929 pruebas[910:207] Letra = d

2010-08-02 02:22:27.930 pruebas[910:207] Letra = f

2010-08-02 02:22:27.930 pruebas[910:207] Letra = h

2010-08-02 02:22:27.931 pruebas[910:207] Letra = j


Como ves solamente el bucle for da mucho juego!!!! :D

jueves, 22 de julio de 2010

Diferencias entre NSInteger , int y NSNumber

Estos tres tipos de datos se usan en objective C pero aunque parezcan iguales entre algunos de ellos existen tanto diferencias como similitudes.

Vamos a empezar por los tipos de datos NSInteger e int. ambos representan un dato de tipo entero y son tipos primitivos por lo que no es necesario reservar memoria dinámicamente e inicializarlos mediante el método init antes de empezar a usarlos. simplemente se declaran y si se quiere se les asigna un valor.

En concreto el tipo int es para arquitectura de 32 bits y se ha heredado del lenguaje C, por el contrario NSInteger es de objective-C y puede tener un tamaño u otro siendo esa su principal diferencia por lo que en nuestro caso para el desarrollo de apps para Iphone/Ipod/Ipad nos resulta ajeno y podemos usar cualquiera de los dos.

En cambio el tipo de dato NSNumber es un objeto que almacena un dato numérico ya sea entero/real/double... y por ello es necesario usar punteros ya que pertenece a objective-c sí hay que reservar memoria dinámicamente y a continuación inicializarlos, ya hemos visto en otros post que lo podemos inicializar a un valor concreto y sino la inicialización por defecto se realiza llamando al método init (con este método el objeto apunta a c)

int myEntero = 4;
NSInteger miEntero_2 = 5
;
NSNumber *miObjetoNumerico = [[NSNumber alloc] initWithInt:40]; // En este caso lo inicializamos con un valor de tipo entero en concreto el 40

sino la inicialización por defecto sería:

NSNumber *miObjetoNumerico = [[NSNumber alloc] init];

Sobre las dudas de "por ello es necesario usar punteros ya que pertenece a objective-c" fue un despiste, ya que es habitual el uso de punteros en objetive C.
¡Gracias a los que nos avisaron del error!

Programación desde Cero: y entonces.. ¿qué es un Objeto?

La palabra objeto estarás harto de escucharla en cualquier libro de programación pues bien, una vez que sabemos lo que es una clase vamos a ver que es un objeto.

La propia definición de objeto lo define como instancia de una clase. Aunque suene un poco raro en realidad un objeto es una clase en la cual lo datos que en la clase solo se indican por ejemplo en el caso del coche: pintura, motor, kilometraje ya en el objeto se les da un valor.

Por ejemplo Un BmwSerie1 es un objeto de la clase Coche pero ¿en qué se diferencia de éste?. En el BmwSerie1 sabemos que el color es blanco, motor 146CV y kilometraje 20.000 ya no tenemos un coche genérico que es lo que es la clase sino que tenemo un coche en concreto y le hemos llamado BmwSerie1.

Por lo que a las cualidades de una clase las vamos a denominar ATRIBUTOS, ¿qué pasa con esos atributos en un objeto? pues que toman un valor.

En el caso del coche los atributos son color, motor y kilometraje y ya hemos visto que para el objeto BmwSerie1 toma valores concretos de ese coche.

Pero hay una cosa que se nos está quedando en el tintero. En el post anterior hablamos de que ese coche genérico que es la clase realizaba una serie de acciones que las realizaban todos los coches independientemente de sus atributos, por decirlo de otra manera. Mi coche X arranca y frena y el coche Y de mi vecino también arranca y frena aunque sean de colores diferentes, distinto motor y diferente kilometraje por lo que a esas acciones que pueden realizar cualquier objeto las vamos a denominas métodos.

En resumidas cuentas siempre que creemos un objeto de la clase Coche tendremos los mismos métodos que la clase (en este caso arrancar, frenar...)

¿Qué tal ambos conceptos un poco más claros? Dejarme comentarios :)

Programación desde Cero: ¿Qué es una clase?

En muchísimos libros y manuales habrás visto que centenares de veces hacen referencia al concepto de clase y habrás pensado que a que pueden hacer referencia. Bueno voy a ver si puedo hacerme entender bien.

Por ejemplo un clase podría ser un coche que es un objeto genérico no? si ya hablamos de un renault o bwm lo que estamos hablando es de un coche concreto cada uno con sus características particulares. Bueno pues una clase es exactamente eso una manera de agrupar una serie de cosas que cumplen un cierto de carácterísticas comunes.

Independientemente de que tengamos un renaul o un bmw ambos tienen 4 ruedas, un volante.... que son características y ambos arrancan o paran estos son acciones que realizan todos los coches.

Otra manera para definir una clase es que en el caso del coche todas las características y cualidades básicas de un coche es la plantilla para el renault o el bmw lo que pasa que después por ejemplo el renanult será rojo y el bmw blanco.

Con esto solo tenéis que haber entendido el concepto básico de Clase.

Si no ha quedado muy claro enviarme un email(pynsoftware@gmail.com) y lo explico de otra manera :)

¿Por qué cuesta más programar para el Iphone?

En varios de vuestros comentarios se repite lo mismo es una plataforma diferente, todo es muy raro, he de deciros que eso son sensaciones y sentimientos habituales tanto si no has programado mucho como si tienes una solida formación en .net, java o php llegas a desarrollar con xcode y parece que todos esos años de experiencia y sólida formación universitaria se vienen abajo.

Nada más lejos de la realidad, solo viendo un nuevo proyecto en el XCode nos damos cuenta de que estamos adentrándonos en un nuevo mundo de programación y que lo que sabíamos puede servinos poco en el mejor de los casos o nada.

Solo deciros que no os desanimeis que eso nos ha pasado a todos y para eso estamos aqui.

También quería agradeceros el apoyo que nos habéis dado a través de vuestros comentarios :)

Nuestro mail ya sabéis que es pynsoftware@gmail.com