¿Cuál es la diferencia entre una variable y una función en Swift (3)?

Una variable contiene un valor, un valor que normalmente puede cambiar:

var minutosInADay: Int = 24 * 60

Podrías cambiar el valor (¿tal vez vamos a Marte?):

minutosInADay = 40 + 24 * 60

Una función tiene mucho más que eso. Las funciones pueden tener argumentos (valores que pasa a la función), y las funciones pueden devolver resultados (valores que puede usar), como un ejemplo de una función que no toma argumentos y devuelve un valor:

func segundosInAMinute () -> Int {
volver 60
}

No puede cambiar este valor:

secondsInAMinute = 64 // Bienvenido a “Error de sintaxis”

Sin embargo, no necesita usar una función solo para crear un nombre para los valores que no desea cambiar:

dejar segundosInAMinute: Int = 60

(no tiene que asignar una variable O constante cuando la define por primera vez, pero sí debe asignarla antes de usarla (con un pequeño conjunto de excepciones), las constantes solo se pueden asignar una vez, y es extremadamente común para que esa asignación sea cuando se declara por primera vez)

Las funciones también pueden tomar argumentos:

func minutesIn (days: Int) -> Int {
días de regreso * 24 * 60
}

Las variables nunca toman argumentos.

Las funciones no siempre devuelven resultados (o etiquetan los argumentos), por ejemplo, imprimir en Swift es una función que toma un argumento sin etiqueta y no tiene retorno, voy a suponer que ha usado ese antes.

Estrictamente hablando, las funciones (también llamadas métodos ) no almacenan valores.

Las variables pueden (pero, confusamente, no siempre).

Una variable (y su hermano, la constante ) puede considerarse como un cuadro, en el que puede colocar un valor. El cuadro tiene un nombre y solo puede contener tipos particulares de datos.

var iAmAVariable = 3.14159

iAmAVariable es una variable (como lo indica la palabra clave var ). Ese es el nombre de la caja. El cuadro contiene solo datos de coma flotante, algo que nosotros (y el compilador) podemos inferir del tipo de valor (3.14159) que asignamos al cuadro con el nombre iAmAVariable .

Debido a que implícitamente le dijimos al compilador que el cuadro llamado iAmAVariable es una variable de punto flotante, podemos cambiar el valor que está almacenado dentro del cuadro, pero cualquier valor que decidamos almacenar en el cuadro también debe ser un valor de punto flotante. Por lo tanto, podemos hacer:

iAmAVariable = 1.0

pero no:

iAmAVariable = “ayúdame”

porque “ayudarme” es una Cadena, no un valor de punto flotante, y ya le dijimos al compilador que iAmAVariable es un cuadro para puntos flotantes.

Por otro lado, las funciones pueden considerarse máquinas, que funcionan. Algunas funciones toman entrada:

func convertSecondsToMinutes (segundos: Int)

y otros no:

func speak () -> Cadena

Algunas funciones devuelven valores (speak (), por ejemplo, devuelve un valor de cadena), y otras (como convertSecondsToMinutes ()) no lo hacen. Lo que ambos hacen es ejecutar bloques de código (sí funcionan).

Esta no es una explicación completa, y la información posterior que encontrará en Swift (propiedades calculadas, cierres) puede parecer que confunde más el problema.

Pero creo que si recién está comenzando, pensando en las variables y las constantes como cuadros para almacenar datos y funciona como máquinas que funcionan en fragmentos discretos, ese es un buen lugar para comenzar.

Por desgracia, no conozco a Swift, ya que no tengo una computadora Apple. Pero a menos que esa compañía tenga la costumbre de reutilizar la terminología de programación antigua (parece poco probable, pero son propensos a pensar de manera diferente), debería poder ayudarlo.

Una variable , en el lenguaje común de CS, generalmente se considera como un nombre que se refiere a algún valor que puede cambiar . De ahí el nombre de la variable . Varía .

Un término relacionado es constante , que es una cantidad con nombre que puede no cambiar. En algunos idiomas (como Haskell), no hay variables en el sentido clásico (solo constantes), pero no creo que esto se aplique a Swift.

Ahora, Swift es un lenguaje de tipo estático , lo que significa que cada variable tiene un tipo, que debe conocerse en tiempo de compilación. Como conoces a Swift (al menos un poco) y yo no, te ahorraré los ejemplos pedagógicos de definición y uso de variables.

Solo recuerde que una variable es un nombre que se refiere a un valor de algún tipo específico , que puede cambiar a medida que su programa se ejecuta (generalmente porque le ha asignado algún otro valor).

Creo que he sentado las bases para abordar la segunda parte de su pregunta ahora.

A saber, ¿qué es, en nombre de Lattner, una función ? ¿No es también un nombre cuyo valor puede cambiar en cualquier momento? No, en realidad no lo es . Dejando a un lado la definición matemática, una función es un pequeño paquete de código reutilizable .

Digamos que tiene una variable entera, temperature . Puede obtener la temperatura actual en función de la ubicación y almacenar el valor en la variable. Entonces ahora la temperature contiene la temperatura actual en alguna unidad, redondeada al entero más cercano. Lo que no contiene es la secuencia de cálculos y llamadas de API que usó para llegar a ese valor. Solo tiene el resultado. Las temperaturas son cosas volubles, ¿no? Por lo tanto, es probable que desee repetir el procedimiento anterior para obtener la temperatura y guardarla, a intervalos regulares o tal vez cuando el usuario se lo solicite.

Entonces, ¿Qué haces? ¿Copias y pegas arduamente la temperatura cuando la necesitas? ¡Por supuesto no! Porque has recordado lo que dije hace dos párrafos, sobre las funciones como paquetes de código. Por lo tanto, define una función, currentTemperatureIn , que acepta un parámetro de location y devuelve la temperatura actual, con todas las llamadas y cálculos de API que mencionamos anteriormente. Un paquete de código.

No podrías hacer eso con una variable común, ¿verdad?

Supongo que una forma simple de pensarlo es que una Variable almacena un valor y una función genera un valor (generalmente basado en un conjunto de parámetros de entrada).

Lo siento, no sé la sintaxis de Swift lo suficientemente bien como para dar un ejemplo, pero en C sería como:

// Esta es una variable
int a = 5;

// Esta es una función
int add (int x, int y) {
devolver x + y;
}

Entonces, en el ejemplo anterior, “a” almacenará un valor de 5 y devolverá ese valor cada vez que se encuentre en su código. Puede asignarle un valor diferente en cualquier momento, pero siempre devolverá el último valor asignado.

La función “agregar” por otro lado solo devolverá 5 si los parámetros “x” e “y” suman el valor 5. Si x fuera igual a 6 e y fuera igual a 2, entonces devolvería 8.

More Interesting

¿Cómo se implementa / maneja generalmente la creación y administración de cuentas de usuario en aplicaciones iOS ya que no parece haber ningún soporte incorporado?

¿Dónde puedo encontrar un tutorial para una aplicación iOS de visualización web UI universal de diseño automático a pantalla completa?

¿Cuál es la mejor manera de aprender aplicaciones móviles iOS?

¿Cuáles son las mejores tiendas offshore para el desarrollo de iPhone desde una perspectiva de valor / calidad?

¿Es posible integrar Braintree en una aplicación Parse para iOS?

Estoy tratando de decidir si construir una aplicación de Facebook en Flash y luego construir un cliente nativo de Iphone, o si debo construir la aplicación en HTML5 / Javascript para que pueda funcionar desde un iPhone. ¿Qué cosas debo considerar?

¿Qué usan los desarrolladores de juegos para crear su propio software?

Para probar un concepto como un nuevo diseño para buscar un hotel usando la API de Expedia, ¿cuál es el costo por usuario para adquirir el servicio en la web frente al móvil?

Cómo crear una aplicación móvil como Venmo o una empresa similar

¿Cómo abordaría un gran programador de iOS la implementación de un elemento de interfaz de usuario complejo y animado?

¿Cuál es la ventaja de iOS sobre Android?

¿Cuáles son las posibilidades de crear una aplicación exitosa para iOS y Android?

¿Crees que iOS ha perdido su estilo con iOS 11?

¿Dónde puedo encontrar una lista de aplicaciones por desarrollador?

¿Qué pasarela de pago usarías para aplicaciones móviles y web?