Sobrecarga de operadores.
La sobrecarga de operadores en scala es más simple, dado que un operador no es más que un método de un objeto. Es decir:
a + b
Es la forma simplificada de :
a.+(b)
Scala no tiene problema en que un método pueda llamase con símbolos tales como +, *, -, %, etc.
Por lo general podemos escribir
objeto método objeto
igual a smalltalk o
objeto.metodo(objeto)
igual a java o c
Otra diferencia importante es que no tenemos los operadores ++ o -- de java o c. Solo tenemos += o
-=
counter+=1
Otra diferencia es que podemos usar operadores para objetos BigInt o BigDecimal:
val x: BigInt = 1234567890
x * x * x // Yields 1881676371789154860897069000
Llamando funciones y métodos
Scala tiene funciones además de métodos. Es más sencillo utilizar funciones matemáticas como min o pow en Scala que en Java; no es necesario llamar a métodos estáticos de una clase.
sqrt(2) // Yields 1.4142135623730951
pow(2, 4) // Yields 16.0
min(3, Pi) // Yields 3.0
Las funciones matemáticas están definidas en el paquete Math que se puede importar:
import scala.math._
Scala no tiene métodos estáticos, pero tiene el concepto de objetos singletones, que son eso objetos que nacen con una sola instancia.
Los métodos que no necesitan parámetros, no necesitan los paréntesis que cierran y abren "()" por ejemplo:
"Hello".distinct
Aplicar un método.
En Scala, es común usar una sintaxis que se parece a una llamada de función. Por ejemplo si a un string lo llamamos con un parámetro entero este retornara el char en posición, similar a llamar a charAt de java o el operador [] en C. Por ejemplo:
"Hello"(4) // Yields 'o'
Esto funciona porque StringOps implemento el método apply :
def apply(n: Int): Char
Este método no es necesario llamarse, es decir se llama de forma implícita, pero podemos llamarlo y funciona:
"Hello".apply(4)
Usar método apply para construir objetos es común es scala, por ejemplo el array:
Array(1, 4, 9, 16) // retorna un array
Seguimos en la parte 3.
Translate
lunes, 19 de diciembre de 2016
sábado, 17 de diciembre de 2016
Un resumen de Scala for the Impatient
Como ya conté, estoy leyendo Scala for the Impatient, y se me ocurrió hacer un resumen. No pienso ser muy correcto en el resumen.
Solamente voy a escribir los temas que me gustaron más y me sorprendieron. Cosa de no evitar que lean un buen libro.
Sin más empezamos:
Empecemos por el principio, el libro recomienda como instalar scala, pero yo por una cuestión de gusto dejo que los busquen ustedes por su cuenta.
Otra buena opción es bajar scala Ide, que es un entorno de desarrollo para scala y permite ejecutar código.
Declarando variables y valores
En scala podemos nombrar valores, es decir a un valor determinado ponerle un nombre:
scala> val answer = 8 * 5 + 2
answer: Int = 42
Con val pusimos un nombre por lo que ese nombre no puede ser usado para otro valor. Es decir se comporta como una constante.
scala> answer = 0
<console>:6: error: reassignment to val
Si necesitamos declarar una variable debemos utilizar la palabra "var"
var counter = 0
counter = 1 // OK, can change a var
Como pudieron notar no le dijimos el tipo a la variable, pero tiene un tipo dado que scala es de tipado estático, lo que sucedio es que el compilador infirio el tipo. Pero si queremos le podemos indicar el tipo:
val greeting: String = null
val greeting: Any = "Hello"
Tipos comunes
Como Java, scala cuenta con tipos tales como Byte , Char , Short , Int , Long , Float y Double, además Boolean. Sin embargo no existe el concepto de valores primitivos, es decir todo es un objeto, en serio. Veamos un ejemplo:
1.toString() //"1"
O mejor aun:
1.to(10) // Yields Range(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
Scala no necesita wrapper types. El compilador se encarga de estos problemas, como debería ser. A la vez el compilador castea tipos de forma automática, por ejemplo el tipo Int a RichInt.
Algo que me falto aclarar es que hay clases RichInt, RichDouble, RichChar, y así sucesivamente. Cada uno de ellos tiene un pequeño conjunto de métodos de conveniencia para actuar sobre sus primos pobres: Int, Double o Char. El método "to" que has visto anteriormente es en realidad un método de la clase RichInt.
Luego continuaremos en la parte 2.
Dejo link:
http://fileadmin.cs.lth.se/scala/scala-impatient.pdf
jueves, 15 de diciembre de 2016
Curso gratuito de Xamarin
Hola Pablo,
¿Se te ocurre un mejor regalo de Navidad que una App multiplataforma? Eso imaginábamos…
¿Ya conoces Xamarin? ¡Queremos que sepas más!, con este fin hemos diseñado el siguiente curso online gratuito, en colaboración con campusMVP, para que conozcas las mejores prácticas en el desarrollo de mobile apps con Xamarin y back-end en Azure.
Mediante este curso interactivo podrás aprender a desarrollar tu propia app de manera interactiva, con retos mensuales, ejercicios y seguimiento con tutores.
El objetivo es que tras el curso tengas el conocimiento necesario para desarrollar una app completa.
El curso arrancará en enero y las plazas son limitadas, por lo que te recomendamos te registres cuanto antes para poder acceder al mismo: https://aka.ms/aprende-xamarin-gratis.
Y además… habrá alguna que otra sorpresa y regalos una vez finalice el curso. ¿Qué más se puede pedir?
¡Celebrapp la Navidapp con Xamarin!
Un abrazo,
miércoles, 14 de diciembre de 2016
Oracle Premier Support for MySQL: Rely on The Experts & Get Unique Benefits
Me llego este mail y lo quiero compartir con ustedes:
View this message in a Web browser |
| |||||||||
|
|
domingo, 11 de diciembre de 2016
Las 5 distros Linux que cambiaron el software libre
Quiero compartir el siguiente artículo dado que coincido mucho con él sobre 5 distros que cambiaron las cosas, es decir dieron un empujón al software libre:
- MCC Interim, la primera distro
- Slackware, la más veterana
- Debian, el abuelo de Linux
- Red Hat, la que demuestra que se puede ganar dinero con el software libre
- Ubuntu, la distro de escritorio más popular
Me parece que le hace justicia a las distros que le dierion un vuelco al software libre, sin más dejo el link: http://www.omicrono.com/2016/12/distros-linux-mas-importantes/?utm_source=dlvr.it&utm_medium=gplus
miércoles, 7 de diciembre de 2016
Lua en Python
Lua se puede embeber en python. Lua es un lenguaje muy bueno, pensado en la simplicidad y es script.
Hace poco leí un articulo sobre como correr lua en python, y me pareció una idea muy buena. La utilidad ?? pensaran ustedes, bueno más allá de nuestra diversión podemos guardar código lua y ejecutarlo y podemos hacer que gente no tan interiorizada con la programación, modifique este código. Se me ocurre reglas de facturación que son muy cambiantes, por ejemplo.
Veamos un ejemplo:
from lupa import LuaRuntime
lua = LuaRuntime()
lua_code = """
function (size)
a = {}
b = {}
st = os.clock()
for i=0, size-1 do
a[i] = math.random(size)
end
for i=0, size-1 do
b[i] = math.random(size)
end
print("LUA init: "..(os.clock()-st))
st = os.clock()
for i=0, size-1 do
if a[i] ~= b[i] then
a[i] = a[i] + b[i]
end
end
print("LUA sum: "..(os.clock()-st))
end
"""
test = lua.eval(lua_code)
size = 5000000
test(size)
Y listo!!
Dejo link: http://alexeyvishnevsky.com/?p=248&imm_mid=0eb43e&cmp=em-prog-na-na-newsltr_20161203
Un Enfoque Moderno hacia la Gestión de Proyectos
Me llego este mail desde oracle:
Ver este mensaje en un navegador Web
|
SEV100483926_MCC100483922_S1
|
domingo, 4 de diciembre de 2016
43 páginas no tan conocidas para aprender algo nuevo
El titulo es una copia del post original que quiero compartir. Es un resumen bastante bueno de páginas para aprender cosas o hacer cursos, las cuales están un tanto ocultas o no son tan famosas.
Dejo el link: http://www.xataka.com/otros/43-paginas-no-tan-conocidas-para-aprender-algo-nuevo
jueves, 1 de diciembre de 2016
Try PHP
La gente de codeschool va por más y ahora nos brinda un curso de PHP :
|
|
martes, 29 de noviembre de 2016
Comparando Scala con F#
Como me gustan las comparaciones, son geniales para peliar con la gente.
En este caso 2 titanes Scala vs F#. Creo que esta comparación tendría mayor sentido si siguieran desarrollando scala.net. Pero creo que este proyecto quedo a la deriva.
Scala corre en javascript, nativo y en java. Y F# en .net y javascript.
Scala fue influido por Java, Ruby y Haskell (entre otros, la lista es muy grande) y F# es hijo de ML fusionado con todo el poder de .net.
Sin más para agregar les dejo el articulo: http://mikhail.io/2016/08/comparing-scala-to-fsharp/
Que piensan cual es mejor??
lunes, 28 de noviembre de 2016
First Class Functions
El concepto de First Class Functions, nos indica que una función no difiere de otro tipo de datos usados en un programa. Esto indica que se puede utilizar como parámetros de una función o ser retornado por una función. Esto permite escribir código altamente reutilizable y a la vez nos permite componer funciones, es decir obtener una función a raíz de otras.
Supongamos que tenemos una función incEven que toma un número n si es par lo incrementa, de lo contrario devuelve el número sin cambios.
ifEvenInc n = if even n
then n + 1
else n
Más tarde descubrimos que necesitamos dos funciones más: doubleEven y squareEven, ese doble y cuadrado números pares, respectivamente. Estas serían funciones fáciles de escribir dado que sabemos cómo escribir incEven:
ifEvenDouble n = if even n
then n * 2
else n
ifEvenSquare n = if even n
then n^2
else n
Aunque estas funciones eran fáciles de escribir, las tres son casi idénticas. La única diferencia es el comportamiento de incrementar, duplicar y elevar al cuadrado. Lo que hemos descubierto aquí es un patrón general de cálculo que podemos abstraer. Para hacer esto necesitamos la capacidad de pasar una función como un argumento para realizar el comportamiento deseado.
Vamos a demostrar esto con la función ifEven que toma una función y un número como argumentos. Si ese número es par aplica la función a ese número:
ifEven myFunction x = if even x
then myFunction x
else x
También podemos abstraer nuestro comportamiento de incrementar, duplicar y elevar al cuadrado en tres funciones separadas:
inc n = n + 1
double n = n*2
square n = n^2
Vamos a recrear nuestras definiciones anteriores usando el poder de las funciones de primera clase:
ifEvenInc n = ifEven inc n
ifEvenDouble n = ifEven double n
ifEvenSquare n = ifEven square n
Ahora podemos agregar nuevas funciones muy fácilmente como ifEvenCube, ifEvenNegate, etc.
Dejo link: http://freecontent.manning.com/learning-haskell-first-class-functions/
Javaslang 3.0, haciendo funcional a Java !
Javaslang, es una librería open source que provee estructuras de control y estructuras de datos diseñados con una mentalidad funcional para Java 8. Hace muy poco libero su versión 3.0
Con la introducción de lambdas (λ) en Java 8, las posibilidades son muchísimas, una muy clara es utilizar estructuras como listas o arboles, como se realiza en la programación funcional, a la vez tener estructuras inmutables y por que no emular estructuras de control como pattern matching.
Creo que se entiende la idea, sin más veamos ejemplos:
Pattern matching:
Number num = Match(personOption).of(
Case(Some(Person($())), person -> 1.0d),
Case(None(), 0)
);
Immutable:
List<String> list = Collections.unmodifiableList(otherList);
// Boom!
list.add("why not?");
Linked List:
// = List(1, 2, 3)
List<Integer> list1 = List.of(1, 2, 3);
// = List(0, 2, 3)
List<Integer> list2 = list1.tail().prepend(0);
Queue:
Queue<Integer> queue = Queue.of(1, 2, 3)
.enqueue(4)
.enqueue(5);
Resultados Opcionales:
// = Queue(1)
Queue<Integer> queue = Queue.of(1);
// = Some((1, Queue()))
Option<Tuple2<Integer, Queue<Integer>>> dequeued =
queue.dequeueOption();
// = Some(1)
Option<Integer> element = dequeued.map(Tuple2::_1);
// = Some(Queue())
Option<Queue<Integer>> remaining =
dequeued.map(Tuple2::_2);
Iterar con Clausuras:
List.of("Java", "Advent").forEach(s -> {
// side effects and mutation
});
Y puedo seguir!!
Solo debemos agregar la siguiente entrada en mi pom.xml, si uso maven:
<dependencies>
<dependency>
<groupId>io.javaslang</groupId>
<artifactId>javaslang</artifactId>
<version>2.0.5</version>
</dependency>
</dependencies>
Que más decir? Solo que en un futuro podríamos esperar que esta funcionalidad este en la jdk.
Dejo link: http://www.javaslang.io/
sábado, 26 de noviembre de 2016
Inyección de dependencia en lenguaje funciónal
Antes que me maten, sepan que sé que son ideas contradictorias. Es decir, definamos programación funcional en pocas palabras, es un paradigma que se basa en el concepto de función matemática, es decir dado un conjunto dominio va a ver un conjunto resultado, el cual se llega por medio de esta función, y para cada valor del conjunto dominio va a haber un resultado. No existen conceptos que estamos acostumbrados como estados o flujo de ejecución, etc.
La inyección de dependencia por el contrario es un concepto que nace en el paradigma de objetos, los cuales posen estado.
Por lo tanto parecen conceptos inconciliables. Es más eso creía, pero lei un articulo bastante interesante que no me convenció, pero me genero dudas y me hizo ver como una posibilidad.
Si bien sabemos que las funciones siempre tienen que devolver el mismo resultado, la inyección de dependencia puede ser útil para demarcar el contexto de la función, lo cual no sería inyección de dependencia sino delimitación o definición de contexto.
Pero en el caso de la composición de funciones, en este caso podríamos ver una utilidad. Supongamos que tenemos una función que es compuesta de 3 funciones y por x motivo en un entorno debe sumar y en otro restar, en este caso sería bueno tenerlo definido de con inyección de dependencias.
Para ser honesto ete articulo me dejo más dudas que certezas, pero dada esta situación me entusiasmo para investigar. Me ayudan? desde su experiencia creen útil el uso id en programación funcional? existe algo para inyectar contexto?
Help me!!!
La inyección de dependencia por el contrario es un concepto que nace en el paradigma de objetos, los cuales posen estado.
Por lo tanto parecen conceptos inconciliables. Es más eso creía, pero lei un articulo bastante interesante que no me convenció, pero me genero dudas y me hizo ver como una posibilidad.
Si bien sabemos que las funciones siempre tienen que devolver el mismo resultado, la inyección de dependencia puede ser útil para demarcar el contexto de la función, lo cual no sería inyección de dependencia sino delimitación o definición de contexto.
Pero en el caso de la composición de funciones, en este caso podríamos ver una utilidad. Supongamos que tenemos una función que es compuesta de 3 funciones y por x motivo en un entorno debe sumar y en otro restar, en este caso sería bueno tenerlo definido de con inyección de dependencias.
Para ser honesto ete articulo me dejo más dudas que certezas, pero dada esta situación me entusiasmo para investigar. Me ayudan? desde su experiencia creen útil el uso id en programación funcional? existe algo para inyectar contexto?
Help me!!!
lunes, 21 de noviembre de 2016
Reactivity con Elm
Escribir aplicaciones reactivas para un programador javascript puede ser complejo, pero que tal si utilizamos un lenguaje que sea construido bajo estos principios? Este es ELM.
Elm fue creada no para responder a la pregunta "¿cómo puede JavaScript ser mejor?", Sino para responder a la pregunta "¿como puedo mejorar experiencia general para desarrolladores de interfaces de usuario Web?"
En la búsqueda de este objetivo, Elm abraza varias ideas que JavaScript no:
Reactive programing como el único sistema para responder a la interacción
Una forma consistente de gestionar los efectos
Un compilador útil que elimina muchos errores antes
El resultado es un lenguaje que compila JavaScript, pero tiene una reputación radicalmente diferente. Es común escuchar que el código de Elm de producción de alguien nunca ha lanzado una excepción de tiempo de ejecución, ni siquiera el temido indefinido no es una función.
Dejo link: https://www.infoq.com/articles/language-reactivity-with-elm?utm_source=linkedin&utm_campaign=calendar&utm_medium=link
http://elm-lang.org/
https://evancz.gitbooks.io/an-introduction-to-elm/content/architecture/index.html
domingo, 20 de noviembre de 2016
Scala for the Impatient
Estoy leyendo el libro "Scala for the Impatient" y lo quiero recomendar. Por varias razones, entre otras cosas:
- Fácil lectura
- Muy rápido y directo
- Ejemplos claros
No es recomendable para gente que comienza a programar, pero los que saben de programación esta muy bueno.
Suscribirse a:
Entradas (Atom)