Programar en Mac 03: Las funciones (I)

Programar en Mac 03: Las funciones (I)

3 mayo, 2010 |  by  |  Programar en Mac

Continuamos con nuestro tutorial sobre Programar en Mac. Ahí va la primera parte del Capítulo 3.

Las Funciones

El código más grande que hemos visto tenía como mucho sólo cinco líneas. Aunque todavía quede mucho para llegar a programas con cientos de líneas, la naturaleza del lenguaje Objective-C hace que tengamos que tratar  ya cómo están organizados los programas.

Si los programas van a consistir en una larga y continua sucesión de órdenes de código, deberá entonces ser complicado localizar y solucionar los ‘bugs’ (como ya hemos dicho, son los errores del código). Además, como es lógico, una misma línea de código podrá aparecer en diferentes lugares; y si hay un bug en ese fragmento de código deberás comprobar el mismo bug en todos esos lugares. ¡Una pesadilla porque es muy fácil que nos olvidemos de uno (o dos)! Así que la gente ha tenido que pensar una manera de organizar el código haciéndolo más sencillo para la localización y resolución de bugs.

La solución a este problema es un grupo de órdenes agrupadas dependiendo de su función. Por ejemplo, tu puedes tener un conjunto de líneas de código que te permitan calcular la superficie del área de un círculo. Una vez que lo has chequeado, ese conjunto de órdenes funcionaran correctamente y tú nunca tendrás que volver a ese código para ver si existen bugs en él.

El conjunto de órdenes, llamado una “función”, tiene un nombre y podrás llamar a ese conjunto de órdenes por su nombre para ejecutar su código. Esto de usar funciones es absolutamente fundamental porque siempre hay al menos una función en un programa: la función “main()”. Esta función “main()” es lo que buscará el compilador, y de esta manera sabrá en qué lugar deberá comenzar la ejecución del código.

La función “main()”

Vamos a echar un vistazo a la función “main()” con más detalle [1]:

// [1]
main()
{
// Cuerpo de la función main(). Pon el código aquí
}

En la línea [1.1] se muestra el nombre de la función, por ejemplo “main”, seguida por los signos de abrir y cerrar paréntesis. Mientras “main” es una palabra reservada en el lenguaje de programación, y “main()” es necesaria para estar presente, cuando definas tus propias funciones podrás llamarlas de la manera que más te apetezca. Los paréntesis están allí por una buena razón pero no lo trataremos hasta un poco más tarde en este mismo capítulo.

En las líneas siguientes [1.2, 1.4] hay signos de llaves. Deberás poner tu código entre esos signos { }. Cualquier cosa entre los signos de llaves se conocerá como cuerpo (body) de la función. Vamos a tomar algo de código de los primeros capítulos y colocarlo a continuación [2]:

// [2]
main()
{
// Vamos a declarar las variables
float anchoDeImagen, alturaDeImagen, areaSuperficieDeImagen;
// Iniciamos las variables (otorgamos a cada variable un valor)
anchoDeImagen = 8.0;
alturaDeImagen = 4.5;
// Y ahora vamos a realizar el cálculo
areaSuperficieDeImagen = anchoDeImagen * alturaDeImagen;
}

Nuestra primera función

Si vamos a continuar añadiendo código a la función main(), podríamos acabar con la dificultad de hacer un “debug” (recordemos anteriores capítulos). Vamos a escribir otro programa, ahora con algo de estructura. Aparte de la función obligatoria main(), vamos a crear la función areaDelCirculo() [3]:

// [3]
main()
{
float anchoDeImagen, alturaDeImagen, areaSuperficieDeImagen;
anchoDeImagen = 8.0;
alturaDeImagen = 4.5;
areaSuperficieDeImagen = anchoDeImagen * alturaDeImagen;
}
areaDelCirculo() //[3.9]
{

}

Esa es una manera sencilla, pero nuestra función personal que comienza con una línea [3.9] no hace nada por ahora. Date cuenta que las especificaciones de la función están fuera del “body” de la función “main()”. En otras palabras, las funciones no están “anidadas”.

Nuestra nueva función “areaDelCirculo()” debe ser llamada desde la función “main()”. Vamos a ver cómo se hace eso [4]:

// [4]
main()
{
float anchoDeImagen, alturaDeImagen, areaSuperficieDeImagen,
radioDelCirculo, areaSuperficieDelCirculo; // [4.4]
anchoDeImagen = 8.0;
alturaDeImagen = 4.5;
radioDelCirculo = 5.0; // [4.7]
areaSuperficieDeImagen = anchoDeImagen * alturaDeImagen;

// ¡Y aquí es donde llamamos a nuestra función!

areaSuperficieDelCirculo = areaDelCirculo(radioDelCirculo); // [4.11]

}

Nota: el resto del programa no está mostrado (ver [3]).

 

7 Comments


  1. me alegro de que sigamos con esto! muy interesante.

  2. Yo no se si esperar a que saquéis una colección de lo dicho en pdf o hacerlo yo mismo. Indirecta off no se si tenéis idea de recoger estos temas en pdf para tenerlo todo de una tacada, si no yo me las arreglo.

  3. Kidonis, como ves estamos sacando dos cosas al mismo tiempo:

    - Estos capítulos, que son un repaso sobre el Lenguaje C (necesario para entender después el C-Objective).

    - En PDF una guía de Programación en Mac basándonos en Cocoa. (Hace unas semanas sacamos un primer PDF con todo lo necesario para entender la Programación en Mac).

    Por supuesto a los PDF les incorporaremos también estos capítulos para que cualquiera pueda comenzar de cero desde el Lenguaje C, pasando por Qué es Cocoa hasta elaborar su primera App para el iPhone.

  4. Tio pues yo no lo veo por ningún lado el mencionado pdf quita un poco de espacio a los tags y pon una imagen con el enlace a los pdf o divide la de programación para mac en 2 y colócalo hay porque yo no veo nada.

    Pero vamos que si dices que ya lo sacaras junto con un post de los de programación vale.

  5. Enhorabuena x vuestro trabajo, he encontrado esta serie de tutoriales por casualidad y aunque a mi parecer el ritmpo es algo lento, la cosa va tomando muy buena pinta…
    Mas o menos cuando podremos mostrar nuestro primer hola mundo! en la pantalla del iphone?

    Estaría bien que os marcaseis un temario y mas o menos unas fechas…

    seguid así, un saludo!

    • Para poder programar en condiciones con Cocoa son necesarias unas nociones básicas de C, en cuanto acabemos con esto nos ponemos manos a la obra con todo.
      Muchas gracias

Leave a Reply