Menú de navegaciónMenú
Categorías

La mejor forma de Aprender Programación online y en español www.campusmvp.es

5 ideas interesantes de Swift sacadas de otros lenguajes

Swift_Lenguaje

El objetivo de este post es mencionar 5 ideas interesantes que incorpora el nuevo lenguaje de desarrollo de Apple y que han sido sacadas de otros lenguajes más o menos populares. Que una idea esté sacada de otro lenguaje es lo normal: hoy en día los nuevos lenguajes se crean a partir de los existentes mezclando conceptos de cada uno de ellos, en base a la orientación y a la filosofía con la que se quiera dotar el lenguaje.

Tómate esta lista de 5 ideas como un ejemplo: no están todas las ideas de Swift. Simplemente hemos elegido cinco de ellas y las mostramos aquí.

¡Empecemos, pues!

1. Inferencia de tipos

Swift es un lenguaje con tipado estático: eso significa que todas las variables tienen un tipo de compilación y que el compilador comprobará que el valor asignado se corresponda al tipo de la variable. La inferencia de tipos es la capacidad del compilador de detectar el tipo de una variable en base a la expresión que se le asigna. Así pues en Swift podemos declarar una variable así:

var str = "Hello World"

Eso declara una variable llamada str y cuyo tipo se deduce a partir de la expresión situada a la derecha del operador de asignación. En este caso, como "Hello World" es una cadena, la variable str es de tipo String.  Si queremos podemos especificar el tipo de la variable pero no estamos obligados a ello:

var str : String = "Hello World"

Tan solo debemos especificar el tipo cuando deseamos declarar una variable sin asignarle un valor inicial: en este caso dado que no hay expresión que permita deducir el tipo de una variable debemos indicarla explícitamente:

var str    // Error
var str : String    // OK

Esta característica se encuentra en otros lenguajes como C# (aunque a diferencia de C#, Swift permite inferir el tipo de constantes) o como C++11. ¡No la confundas con la declaración de variables de un lenguaje dinámico como JavaScript!

2. Operador de rango

El operador de rango (...) permite definir directamente un rango de valores. Los rangos son un tipo de datos válido por lo que pueden ser asignados a variables:

var range = 1...10

Los rangos pueden iterarse:

for value in range { }

Y por supuesto el operador de rango no está limitado a constantes:

var from = 2
var to = 12
var range = from...to

Esta característica se encuentra en lenguajes como Python

3. Punto y coma no (pero bueno, si lo pones no pasa nada)

Swift elimina la necesidad de usar el punto y coma para separar sentencias que estén en líneas separadas, pero si lo usas no genera ningún error.  Así ambas líneas de código son válidas:

var start = 10
var start = 10;

Eso sí, el punto y coma sigue siendo obligatorio para separar sentencias en una misma línea:

var from =10; var to=20      // El ; después del 10 es obligatorio. Después del 20 puede venir o no (al ser la última sentencia de la línea).

Esta característica se encuentra, aunque con ciertas diferencias, en JavaScript.

4. Tuplas

Las tuplas se incorporan como tipo nativo del lenguaje:

var tuple = (1,2,3)
var first = tuple.0   // first valdrá 1

Las tuplas se pueden pasar como parámetros o ser devueltos por una función:

func getTuple() -> (Int, Int, Int) {
    return (1,2,3)
}
var tuple = getTuple()
println (tuple.0)

Las tuplas pueden tener parámetros nombrados lo que reduce mucho la necesidad de crear clases que se usan una sola vez:

func getFullName() -> (name: String, lastName: String) {
    return ("Super", "Lopez")
}
var tuple = getFullName()
println (tuple.name)     // tuple.0 sigue funcionando

Esta característica se encuentra en Pyhton o Scala. Casi cualquier lenguaje tiene soporte para tuplas, pero no todos lo tienen integrado como un tipo "nativo" del lenguaje.

5. Enumeraciones

Muchos lenguajes soportan enumeraciones, pero pocos las tienen tan potentes como las de Swift. Así las enumeraciones pueden tener métodos e implementar interfaces (protocolos en la jerga de Swift). La declaración de enumeraciones es muy sencilla:

enum Features {
case Basic, Advanced
}

A diferencia de muchos lenguajes (tales como C ó C#) las enumeraciones no tienen una correspondencia con un valor entero.

Para implementar un protocolo:

// Define un protocolo (interfaz) con un método Bar
protocol DescProtocol {
    func Description () -> String
}

enum Features : DescProtocol {
    case Basic, Advanced
    func Description() -> String {
        switch (self) {
            case .Basic:
                return "Basic features only"
            case .Advanced:
                return "Advanced features on"
        }
    }
}

// Declaramos una variable de tipo Features
var features = Features.Advanced
println(features.Description())

// Declaramos una variable de tipo DescProtocol
var descriptable : DescProtocol = Features.Basic
println(descriptable.Description())

Esta capacidad de las enumeraciones de tener métodos se puede encontrar en Java.

Estas son solo 5 características a modo de ejemplo que se pueden encontrar en Swift... ¡Por supuesto hay otras que iremos explorando en sucesivos posts!

Y a ti, ¿cuáles son las características de Swift que más te gustan?

Eduard Tomás Eduard es ingeniero informático, atesora muchos años de experiencia como desarrollador y ha sido galardonado como MVP por Microsoft en diez ocasiones. Está especializado en el desarrollo de aplicaciones web y móviles. Mantiene un conocido blog sobre desarrollo en .NET en general y ASP.NET MVC en particular. Colabora con la comunidad impartiendo charlas en formato webcast y en eventos de distintos grupos de usuarios. Puedes seguirlo en Twitter en @eiximenis. Ver todos los posts de Eduard Tomás

Boletín campusMVP.es

Solo cosas útiles. Una vez al mes.

🚀 Únete a miles de desarrolladores

DATE DE ALTA

x No me interesa | x Ya soy suscriptor

La mejor formación online para desarrolladores como tú

Agregar comentario

Los datos anteriores se utilizarán exclusivamente para permitirte hacer el comentario y, si lo seleccionas, notificarte de nuevos comentarios en este artículo, pero no se procesarán ni se utilizarán para ningún otro propósito. Lee nuestra política de privacidad.