SlideShare une entreprise Scribd logo
1  sur  69
Télécharger pour lire hors ligne
O que eh que
 o java nao
    tem?
Denis costa
@deniscostadsc
Etb fatec
 open source linux
  regex web python
  Coding dojo
traducao django javascript
      comunidade
sou programador
2006 – pascal, delphi
2007 – shell script, regex
2008 – python
2010 – Javascript
2011 – C, java
2012 – javascript
2006 – pascal, delphi
2007 – shell script, regex
2008 – python
2010 – Javascript
2011 – C, java
2012 – javascript
Por que aprender
javascript de novo?
de novo nao,
 de verdade
var fatorial = function () {
    // Memoization
    var results = [];
    return function fat (n) {
        if(results[n])
             return results[n];
        if(n === 0)
             result = 1;
        else
             result = fat(n – 1) * n;
        results[n] = result;
        return results[n];
    };
}();
fatorial(5);   // 120 - 6 recursoes
fatorial(6);   // 720 - 2 recursoes
vai dizer
 que essas
gambiarras
 sao boas?
essas coisas nao
sao gambiarras,
e eu vou explicar
    o motivo
Pascal == C == java
Abra sua mente
afinal, o que
   eh que o
java nao tem?
tipagem
dinamica
Variaveis sem tipo



 variavel   objeto
Checagem de tipos em
  tempo de execucao

number = (1..100).to_a.choice
if number == 42
    # runtime error
    puts('4' + 2)
end
Pros
    e
contras
Contras
- Sem checagem em tempo de compilacao
pros
- sem casting
- sem interfaces ou classes em comum
Quem tem?
   Ruby, Python,
Javascript, Php, lua
 perl, smalltalk...
Duck
typing
"quando eu vejo um passaro
que anda como um pato, nada
como um pato e grasna como
  um pato, eu chamo essa
     passaro de pato."

   James Whitcomb Riley
alex martelli
interface
implicita
polimorfismo
sem interfaces
  ou heranca
def foo(my_object):
    my_object.my_method()
my_object[1]
my_object.__getitem__(1)
Quem tem?
    Ruby, Python,
Javascript, Php, perl,
smalltalk, C#, lua...
Passagem
flexivel de
parametros
def foo(*args):
    pass

foo()
foo(1, 2, 3, 4, 5)
foo(*[1, 2, 3, 4, 5])
def foo(**kwargs):
    pass

foo()
foo(a=1, b=2, c=3)
foo(**{'a': 1, 'b': 2, 'c': 3})
def foo(param=True):
    pass

foo()
foo(False)
foo(param=False)
def foo(param, param_two=True, *args, **kwargs):
    pass
sem
sobrecarga
de metodos
Quem tem?
Python, ruby, lua,
  Javascript*...
first
  class
functions
funcoes sao
objetos comuns,
como inteiros e
    strings
podem ser
 passadas como
  parametro e
retornadas como
 valor de outra
     funcao
def calculate(number, functions):
    for function in functions:
        number = function(number)
    return number
def sum_one(number):
    return number + 1
def multiply_two(number):
    return number * 2
def power_three(number):
    return number ** 3
functions = [sum_one, multiply_two, power_three]
print calculate(2, functions)
def my_map(function, items):
    result = []
    for item in items:
        result.append(function(item))
    return result
var surround = function (tag) {
    return function (text) {
        return '<' + tag + '>' + text + '</' + tag + '>';
    };
};

strong = surround('strong');
small = surround('small');

strong('My text');
// <strong>My text</strong>

small('My text');
// <small>My text</small>
Quem tem?
Python, ruby, lua,
Javascript, c++*,
     lisp...
closure
eh uma
necessidade de
  funcoes de
primeira classe
var counter = function () {
     var number = 0;
     return function () {
         return ++number;
     };
}();
var fatorial = function () {
    // Memoization
    var results = [];
    return function fat (n) {
        if(results[n])
             return results[n];
        if(n === 0)
             result = 1;
        else
             result = fat(n – 1) * n;
        results[n] = result;
        return results[n];
    };
}();
fatorial(5);   // 120 - 6 recursoes
fatorial(6);   // 720 - 2 recursoes
Quem tem?
Python, ruby, lua,
Javascript, c++*,
     lisp...
list
comprehension
inspirado nos
conjuntos da
 matematica
cria lista
baseado em
   lista
 existente
even = [s for s in range(1001) if s % 2 == 0]
Quem tem?
Python, ruby, erlang,
 scala, smalltalk...
lambda functions
funcao declarada
   que pode ser
  executada sem
estar ligada a uma
    referencia
lambda x: x + x
lambda{|x| x + x}
(int x) -> x + x

() -> 42

(String s) -> { System.out.println(s); }
map(lambda x: x + x, [1, 2, 3, 4])
Quem tem?

Python, ruby, javascript,
   lua, erlang, scala,
   smalltalk, java*...
Obrigado

 Q & A

Contenu connexe

Tendances

Python: Iteraveis, geradores etc
Python: Iteraveis, geradores etcPython: Iteraveis, geradores etc
Python: Iteraveis, geradores etcLuciano Ramalho
 
Exercícios de programação orientado a objeto
Exercícios de programação orientado a objetoExercícios de programação orientado a objeto
Exercícios de programação orientado a objetoGleyciana Garrido
 
Python: a primeira mordida
Python: a primeira mordidaPython: a primeira mordida
Python: a primeira mordidaLuciano Ramalho
 
Por que voce precisa (re)aprender linguagens funcionais
Por que voce precisa (re)aprender linguagens funcionaisPor que voce precisa (re)aprender linguagens funcionais
Por que voce precisa (re)aprender linguagens funcionaisLuiz Borba
 
Apresentação recursividade rev2
Apresentação recursividade rev2Apresentação recursividade rev2
Apresentação recursividade rev2Rogerio Oliveira
 
Programação funcional tipada: uma introdução
Programação funcional tipada: uma introduçãoProgramação funcional tipada: uma introdução
Programação funcional tipada: uma introduçãoArthur Xavier
 
[Curso Java Basico] Aula 20: Arrays multidimensionais - Matrizes
[Curso Java Basico] Aula 20: Arrays multidimensionais - Matrizes[Curso Java Basico] Aula 20: Arrays multidimensionais - Matrizes
[Curso Java Basico] Aula 20: Arrays multidimensionais - MatrizesLoiane Groner
 
Programação funcional em JavaScript: como e por quê?
Programação funcional em JavaScript: como e por quê?Programação funcional em JavaScript: como e por quê?
Programação funcional em JavaScript: como e por quê?Arthur Xavier
 
Estrutura de Dados - Aula 04
Estrutura de Dados - Aula 04Estrutura de Dados - Aula 04
Estrutura de Dados - Aula 04thomasdacosta
 
Orientação a Objetos em Python
Orientação a Objetos em PythonOrientação a Objetos em Python
Orientação a Objetos em PythonLuciano Ramalho
 
19 algoritmos de enumeracao
19   algoritmos de enumeracao19   algoritmos de enumeracao
19 algoritmos de enumeracaoRicardo Bolanho
 
Curso de Java: Introdução a lambda e Streams
Curso de Java: Introdução a lambda e StreamsCurso de Java: Introdução a lambda e Streams
Curso de Java: Introdução a lambda e StreamsHelder da Rocha
 
Estrutura de Dados - Aula 08
Estrutura de Dados - Aula 08Estrutura de Dados - Aula 08
Estrutura de Dados - Aula 08thomasdacosta
 
[Curso Java Basico] Aula 62: Varargs
[Curso Java Basico] Aula 62: Varargs[Curso Java Basico] Aula 62: Varargs
[Curso Java Basico] Aula 62: VarargsLoiane Groner
 
Técnicas de Programação Funcional
Técnicas de Programação FuncionalTécnicas de Programação Funcional
Técnicas de Programação FuncionalLambda 3
 

Tendances (19)

Java para iniciantes
Java para iniciantesJava para iniciantes
Java para iniciantes
 
Python: Iteraveis, geradores etc
Python: Iteraveis, geradores etcPython: Iteraveis, geradores etc
Python: Iteraveis, geradores etc
 
Recursividade
RecursividadeRecursividade
Recursividade
 
Exercícios de programação orientado a objeto
Exercícios de programação orientado a objetoExercícios de programação orientado a objeto
Exercícios de programação orientado a objeto
 
Python: a primeira mordida
Python: a primeira mordidaPython: a primeira mordida
Python: a primeira mordida
 
Por que voce precisa (re)aprender linguagens funcionais
Por que voce precisa (re)aprender linguagens funcionaisPor que voce precisa (re)aprender linguagens funcionais
Por que voce precisa (re)aprender linguagens funcionais
 
App scala
App scalaApp scala
App scala
 
Aula 01
Aula 01Aula 01
Aula 01
 
Apresentação recursividade rev2
Apresentação recursividade rev2Apresentação recursividade rev2
Apresentação recursividade rev2
 
Programação funcional tipada: uma introdução
Programação funcional tipada: uma introduçãoProgramação funcional tipada: uma introdução
Programação funcional tipada: uma introdução
 
[Curso Java Basico] Aula 20: Arrays multidimensionais - Matrizes
[Curso Java Basico] Aula 20: Arrays multidimensionais - Matrizes[Curso Java Basico] Aula 20: Arrays multidimensionais - Matrizes
[Curso Java Basico] Aula 20: Arrays multidimensionais - Matrizes
 
Programação funcional em JavaScript: como e por quê?
Programação funcional em JavaScript: como e por quê?Programação funcional em JavaScript: como e por quê?
Programação funcional em JavaScript: como e por quê?
 
Estrutura de Dados - Aula 04
Estrutura de Dados - Aula 04Estrutura de Dados - Aula 04
Estrutura de Dados - Aula 04
 
Orientação a Objetos em Python
Orientação a Objetos em PythonOrientação a Objetos em Python
Orientação a Objetos em Python
 
19 algoritmos de enumeracao
19   algoritmos de enumeracao19   algoritmos de enumeracao
19 algoritmos de enumeracao
 
Curso de Java: Introdução a lambda e Streams
Curso de Java: Introdução a lambda e StreamsCurso de Java: Introdução a lambda e Streams
Curso de Java: Introdução a lambda e Streams
 
Estrutura de Dados - Aula 08
Estrutura de Dados - Aula 08Estrutura de Dados - Aula 08
Estrutura de Dados - Aula 08
 
[Curso Java Basico] Aula 62: Varargs
[Curso Java Basico] Aula 62: Varargs[Curso Java Basico] Aula 62: Varargs
[Curso Java Basico] Aula 62: Varargs
 
Técnicas de Programação Funcional
Técnicas de Programação FuncionalTécnicas de Programação Funcional
Técnicas de Programação Funcional
 

Similaire à O que o Java não tem

Evolução e futuro do uso de paradigmas no JavaScript
Evolução e futuro do uso de paradigmas no JavaScriptEvolução e futuro do uso de paradigmas no JavaScript
Evolução e futuro do uso de paradigmas no JavaScriptJean Carlo Emer
 
Objetos Pythonicos - compacto
Objetos Pythonicos - compactoObjetos Pythonicos - compacto
Objetos Pythonicos - compactoLuciano Ramalho
 
Escrevendo modulos python com rust
Escrevendo modulos python com rustEscrevendo modulos python com rust
Escrevendo modulos python com rustBruno Rocha
 
TDC2016SP - Trilha Node.Js
TDC2016SP - Trilha Node.JsTDC2016SP - Trilha Node.Js
TDC2016SP - Trilha Node.Jstdc-globalcode
 
Refatoração de código com Capitão Nascimento versão completa
Refatoração de código com Capitão Nascimento versão completaRefatoração de código com Capitão Nascimento versão completa
Refatoração de código com Capitão Nascimento versão completaEduardo Bregaida
 
Ruby e Erlang de mãos dadas
Ruby e Erlang de mãos dadasRuby e Erlang de mãos dadas
Ruby e Erlang de mãos dadasÉverton Ribeiro
 
Python Funcional
Python FuncionalPython Funcional
Python Funcionalpugpe
 
O que mudou no Ruby 1.9
O que mudou no Ruby 1.9O que mudou no Ruby 1.9
O que mudou no Ruby 1.9Nando Vieira
 
Relato Sobre a Migração de uma Aplicação Legada para Rails
Relato Sobre a Migração de uma Aplicação Legada para RailsRelato Sobre a Migração de uma Aplicação Legada para Rails
Relato Sobre a Migração de uma Aplicação Legada para RailsCássio Marques
 
Desmistificando Built-in Functions, Lambda e List Comprehension...
Desmistificando Built-in Functions, Lambda e List Comprehension...Desmistificando Built-in Functions, Lambda e List Comprehension...
Desmistificando Built-in Functions, Lambda e List Comprehension...Matheus Pereira
 
Light Talk sobre JavaScript Funcional
Light Talk sobre JavaScript FuncionalLight Talk sobre JavaScript Funcional
Light Talk sobre JavaScript FuncionalEmanuel Gonçalves
 
IEEEweek 2017 @ DETI Univ. Aveiro - Workshop Python
IEEEweek 2017 @ DETI Univ. Aveiro - Workshop PythonIEEEweek 2017 @ DETI Univ. Aveiro - Workshop Python
IEEEweek 2017 @ DETI Univ. Aveiro - Workshop PythonDiogo Gomes
 

Similaire à O que o Java não tem (20)

Evolução e futuro do uso de paradigmas no JavaScript
Evolução e futuro do uso de paradigmas no JavaScriptEvolução e futuro do uso de paradigmas no JavaScript
Evolução e futuro do uso de paradigmas no JavaScript
 
Javascript
JavascriptJavascript
Javascript
 
Objetos Pythonicos - compacto
Objetos Pythonicos - compactoObjetos Pythonicos - compacto
Objetos Pythonicos - compacto
 
Escrevendo modulos python com rust
Escrevendo modulos python com rustEscrevendo modulos python com rust
Escrevendo modulos python com rust
 
JavaScript - A Linguagem
JavaScript - A LinguagemJavaScript - A Linguagem
JavaScript - A Linguagem
 
TDC2016SP - Trilha Node.Js
TDC2016SP - Trilha Node.JsTDC2016SP - Trilha Node.Js
TDC2016SP - Trilha Node.Js
 
Introdução ao paradigma funcional com scala
Introdução ao paradigma funcional com scalaIntrodução ao paradigma funcional com scala
Introdução ao paradigma funcional com scala
 
Refatoração de código com Capitão Nascimento versão completa
Refatoração de código com Capitão Nascimento versão completaRefatoração de código com Capitão Nascimento versão completa
Refatoração de código com Capitão Nascimento versão completa
 
Ruby e Erlang de mãos dadas
Ruby e Erlang de mãos dadasRuby e Erlang de mãos dadas
Ruby e Erlang de mãos dadas
 
Dev Ext PHP
Dev Ext PHPDev Ext PHP
Dev Ext PHP
 
Migrando pra Scala
Migrando pra ScalaMigrando pra Scala
Migrando pra Scala
 
Pythonfuncional
PythonfuncionalPythonfuncional
Pythonfuncional
 
Python Funcional
Python FuncionalPython Funcional
Python Funcional
 
O que mudou no Ruby 1.9
O que mudou no Ruby 1.9O que mudou no Ruby 1.9
O que mudou no Ruby 1.9
 
Relato Sobre a Migração de uma Aplicação Legada para Rails
Relato Sobre a Migração de uma Aplicação Legada para RailsRelato Sobre a Migração de uma Aplicação Legada para Rails
Relato Sobre a Migração de uma Aplicação Legada para Rails
 
Python
PythonPython
Python
 
Desmistificando Built-in Functions, Lambda e List Comprehension...
Desmistificando Built-in Functions, Lambda e List Comprehension...Desmistificando Built-in Functions, Lambda e List Comprehension...
Desmistificando Built-in Functions, Lambda e List Comprehension...
 
Light Talk sobre JavaScript Funcional
Light Talk sobre JavaScript FuncionalLight Talk sobre JavaScript Funcional
Light Talk sobre JavaScript Funcional
 
IEEEweek 2017 @ DETI Univ. Aveiro - Workshop Python
IEEEweek 2017 @ DETI Univ. Aveiro - Workshop PythonIEEEweek 2017 @ DETI Univ. Aveiro - Workshop Python
IEEEweek 2017 @ DETI Univ. Aveiro - Workshop Python
 
Aula 14 - Funções: não duplique seu código
Aula 14 - Funções: não duplique seu códigoAula 14 - Funções: não duplique seu código
Aula 14 - Funções: não duplique seu código
 

O que o Java não tem