Scala é considerada uma linguagem funcional porque suporta:
1) Programação funcional através de funções de ordem superior e avaliação atrasada;
2) Transparência referencial evitando efeitos colaterais;
3) Streams permitem gerar sequências infinitas de maneira preguiçosa.
A avaliação preguiçosa (lazy evaluation) em Scala permite atrasar a avaliação de expressões até que seus valores sejam necessários, evitando avaliações repetidas e possíveis erros em locais diferentes do código. Isso é implementado através de lazy vals, streams e call by name.
O documento contém 5 classes Java que realizam operações matemáticas simples como cálculo de resto e quociente, descontos em salários, comparação e ordenação de números inteiros utilizando estruturas condicionais if-else. Cada classe pede entrada de dados do usuário via Scanner e exibe resultados.
1. O documento introduz os principais conceitos do paradigma funcional e da linguagem Scala.
2. É destacado que no paradigma funcional a computação é baseada em avaliações de expressões imutáveis, diferentemente do paradigma imperativo que permite mudanças de estado.
3. Características como funções de primeira classe, recursividade, avaliação preguiçosa e tipagem são apresentadas como fundamentais no paradigma funcional e implementadas na linguagem Scala.
Programação funcional tipada: uma introduçãoArthur Xavier
1. A introdução apresenta programação funcional e o autor Arthur Xavier.
2. Os benefícios da programação funcional incluem previsibilidade, testabilidade, facilidade de raciocínio e simplicidade.
3. O documento discute conceitos como funções puras, imutabilidade, tipos, composição e recursividade.
Programação funcional em JavaScript: como e por quê?Arthur Xavier
JavaScript é uma linguagem complexa e perigosa. A ausência de tipagem estática e duck typing, por exemplo, tornam difícil pensar de forma segura sobre as aplicações e garantir um nível mínimo de corretude e sustentabilidade. Programação funcional é um paradigma de programação que pode ser aplicado com sucesso à linguagem para minimizar estes problemas ao mesmo tempo que torna o código mais simples e aumenta o poder de abstração do desenvolvedor.
Pistache: A π-Calculus Internal Domain Specific Language for Scalapmatiello
Pistache is an implementation of the pi-calculus as an internal domain specific language for Scala. It provides pi-calculus abstractions for concurrent computation within Scala. In Pistache, agents communicate by exchanging names through channels and connections between agents can change dynamically. It defines agents, names, channels, actions, and composition of agents. Pistache executes agents concurrently using a cached thread pool for efficient execution of large numbers of agents.
A Compositional Encoding for the Asynchronous Pi-Calculus into the Join-Calculussmennicke
This document presents a compositional encoding of the asynchronous π-calculus (πa) into the join-calculus. It discusses the key differences between πa and the join-calculus in terms of their primitives for parallelism, communication, and restriction. It then reviews an existing encoding by Fournet and Gonthier, and Gorla's criteria for a good encoding in terms of compositionality, name invariance, and operational correspondence. The goal is to define a new encoding of πa into the join-calculus that satisfies Gorla's criteria for being a good encoding.
The document discusses model-driven development approaches for context-aware reactive applications (CARA), beginning with definitions of context-aware and reactive applications, and then exploring modelling techniques like UML profiles and the widget calculus formalism for representing CARA models, with examples including a simple button model and the "Buddy" mobile phone contact application case study.
A avaliação preguiçosa (lazy evaluation) em Scala permite atrasar a avaliação de expressões até que seus valores sejam necessários, evitando avaliações repetidas e possíveis erros em locais diferentes do código. Isso é implementado através de lazy vals, streams e call by name.
O documento contém 5 classes Java que realizam operações matemáticas simples como cálculo de resto e quociente, descontos em salários, comparação e ordenação de números inteiros utilizando estruturas condicionais if-else. Cada classe pede entrada de dados do usuário via Scanner e exibe resultados.
1. O documento introduz os principais conceitos do paradigma funcional e da linguagem Scala.
2. É destacado que no paradigma funcional a computação é baseada em avaliações de expressões imutáveis, diferentemente do paradigma imperativo que permite mudanças de estado.
3. Características como funções de primeira classe, recursividade, avaliação preguiçosa e tipagem são apresentadas como fundamentais no paradigma funcional e implementadas na linguagem Scala.
Programação funcional tipada: uma introduçãoArthur Xavier
1. A introdução apresenta programação funcional e o autor Arthur Xavier.
2. Os benefícios da programação funcional incluem previsibilidade, testabilidade, facilidade de raciocínio e simplicidade.
3. O documento discute conceitos como funções puras, imutabilidade, tipos, composição e recursividade.
Programação funcional em JavaScript: como e por quê?Arthur Xavier
JavaScript é uma linguagem complexa e perigosa. A ausência de tipagem estática e duck typing, por exemplo, tornam difícil pensar de forma segura sobre as aplicações e garantir um nível mínimo de corretude e sustentabilidade. Programação funcional é um paradigma de programação que pode ser aplicado com sucesso à linguagem para minimizar estes problemas ao mesmo tempo que torna o código mais simples e aumenta o poder de abstração do desenvolvedor.
Pistache: A π-Calculus Internal Domain Specific Language for Scalapmatiello
Pistache is an implementation of the pi-calculus as an internal domain specific language for Scala. It provides pi-calculus abstractions for concurrent computation within Scala. In Pistache, agents communicate by exchanging names through channels and connections between agents can change dynamically. It defines agents, names, channels, actions, and composition of agents. Pistache executes agents concurrently using a cached thread pool for efficient execution of large numbers of agents.
A Compositional Encoding for the Asynchronous Pi-Calculus into the Join-Calculussmennicke
This document presents a compositional encoding of the asynchronous π-calculus (πa) into the join-calculus. It discusses the key differences between πa and the join-calculus in terms of their primitives for parallelism, communication, and restriction. It then reviews an existing encoding by Fournet and Gonthier, and Gorla's criteria for a good encoding in terms of compositionality, name invariance, and operational correspondence. The goal is to define a new encoding of πa into the join-calculus that satisfies Gorla's criteria for being a good encoding.
The document discusses model-driven development approaches for context-aware reactive applications (CARA), beginning with definitions of context-aware and reactive applications, and then exploring modelling techniques like UML profiles and the widget calculus formalism for representing CARA models, with examples including a simple button model and the "Buddy" mobile phone contact application case study.
IEEEweek 2017 @ DETI Univ. Aveiro - Workshop PythonDiogo Gomes
O documento apresenta uma introdução ao workshop de Python realizado na IEEE Week '17. Apresenta brevemente conceitos fundamentais da linguagem como variáveis, funções, listas, dicionários e operações com strings. Explica também como ler e processar dados de ficheiros e da internet usando bibliotecas como urllib e json.
Palestra apresentada por mim, Felipe Ribeiro, na PHP Conference Brasil 2009 mostrando os novos recursos do PHP 5.3 no que diz respeito a estruturas de dados
1) O documento apresenta um programa de treinamento em programação funcional em Haskell, abordando tópicos como módulos, funções de ordem superior, e o desafio de implementar a cifra de César em Haskell.
2) São apresentadas funções como map, filter, foldr que mapeiam, filtram e dobram listas, respectivamente. Também são explicadas funções de composição e predicados com all e any.
3) Como desafio, o aluno deve implementar em Haskell a cifra de César, um método simples de criptograf
Este documento apresenta uma introdução aos principais tipos de dados em Python, incluindo números, strings, listas, tuplas, conjuntos, dicionários e funções como map, filter e reduce. Demonstra como manipular esses tipos de dados com exemplos de inicialização, iteração, ordenação, filtragem e redução.
1) O documento introduz a linguagem R, abordando sua história, instalação, editores de texto, manipulação de objetos, entrada e saída de dados, e distribuições de probabilidade.
2) São apresentados conceitos sobre modos e atributos de objetos no R, como vetores, matrizes, listas e data frames.
3) O documento também explica a importação e exportação de dados, e como gerar gráficos e saídas em diferentes formatos a partir do R.
1) O documento discute programação funcional, incluindo funções como valores, programação sem efeitos colaterais, funções de ordem superior e Scheme.
2) Apresenta exemplos de funções em Scheme, incluindo ordenação de listas usando diferentes critérios de comparação.
3) Demonstra como funções podem receber e retornar outras funções, e como isso permite a criação de funções mais gerais.
O documento descreve as principais características da linguagem Swift da Apple para desenvolvimento no iOS, incluindo: 1) variáveis e constantes; 2) tipos de dados como Strings, Inteiros e Ponto Flutuante; 3) Coleções como Arrays e Dictionaries; 4) Estruturas, Classes, Enumerações e Protocolos; 5) Funções e Controle de Fluxo. O foco é apresentar os principais conceitos da linguagem de forma concisa.
O documento resume os principais tipos de dados e operadores em C#. Apresenta tipos primitivos como int, float e bool e tipos complexos como arrays, enumerações e estruturas. Descreve também operadores aritméticos, relacionais e lógicos e declarações como if/else e laços de repetição.
Este documento apresenta um curso introdutório sobre Python. Ele inclui seções sobre blocos, controle de fluxo, funções, tratamento de exceções, estruturas de dados como listas e dicionários, e módulos. O documento fornece exemplos de código Python para ilustrar os principais conceitos da linguagem.
O documento discute conceitos de orientação a objetos em Python, definindo objetos como componentes de software que incluem dados e comportamentos. Explica que classes definem tipos de objetos abstratos e instâncias de classes são objetos concretos. Demonstra a criação de uma classe Cao e instância rex para ilustrar a relação entre classe e objeto.
O documento descreve as principais novidades da Java 8, incluindo lambdas, métodos de referência, interfaces funcionais, melhorias na API Stream e na API de datas com o pacote java.time. O foco é explicar 5 dessas features chave: lambdas, métodos de referência, métodos default, API Stream e a nova API de datas no pacote java.time.
Estruturas de Dados - Listas Encadeadas (Linked List)Erick Petrucelli
Este documento discute estruturas de dados, incluindo estruturas lineares como pilhas, filas e listas, e não-lineares como tabelas de espalhamento e árvores. Ele se concentra em listas encadeadas, definindo uma classe Node para representar cada nó e uma classe LinkedList para implementar operações como inserção e remoção de nós em qualquer posição da lista.
O documento apresenta técnicas de programação funcional em F# e Scala, como funções de alta ordem, imutabilidade, pattern matching e avaliação preguiçosa. Estas técnicas permitem maior confiabilidade no código e facilitam a manipulação de listas e estruturas de dados de forma funcional.
O documento discute as características da tipagem dinâmica que o Java não possui, como variáveis sem tipo e checagem de tipos em tempo de execução. Também aborda conceitos como duck typing, funções de primeira classe, closure e list comprehension, presentes em linguagens de tipagem dinâmica como Python, Ruby e Javascript.
Palestra sobre persistência de dados no SQLite com Room API apresentada no TDC São Paulo 2017 (19/07/2017). O Room é um dos Architectural Components apresentados pelo Google no Google I/O 2017.
Este documento discute os motivos pelos quais o autor gosta da linguagem Scala. Brevemente aborda conceitos como programação funcional, concorrência, atores e como Scala suporta esses paradigmas de maneira elegante.
Bogosort e Técnicas Realmente Avançadas de ProgramaçãoRodolpho Eckhardt
Este documento discute vários tópicos relacionados a programação Python, incluindo:
1) Uso de bound methods para substituir lookups globais por lookups locais;
2) Otimização de código através de vectorização e uso de lambdas;
3) Problemas com o uso de kwargs mutáveis.
O documento discute dobras em Haskell usando as funções foldl, foldr, foldl1 e foldr1. Explica que foldl dobra da esquerda para a direita enquanto foldr dobra da direita para a esquerda. Apresenta exemplos mostrando como essas funções dobram listas e como lidam com valores iniciais.
O documento descreve diferentes tipos de operadores, variáveis e comandos utilizados em shells do Linux, incluindo operadores aritméticos, relacionais, lógicos e de atribuição, variáveis especiais, expansão de variáveis, redirecionamento de entrada e saída e formatadores para comandos como date e printf.
As classes de modelagem podem ser comparadas a moldes ou
formas que definem as características e os comportamentos dos
objetos criados a partir delas. Vale traçar um paralelo com o projeto de
um automóvel. Os engenheiros definem as medidas, a quantidade de
portas, a potência do motor, a localização do estepe, dentre outras
descrições necessárias para a fabricação de um veículo
IEEEweek 2017 @ DETI Univ. Aveiro - Workshop PythonDiogo Gomes
O documento apresenta uma introdução ao workshop de Python realizado na IEEE Week '17. Apresenta brevemente conceitos fundamentais da linguagem como variáveis, funções, listas, dicionários e operações com strings. Explica também como ler e processar dados de ficheiros e da internet usando bibliotecas como urllib e json.
Palestra apresentada por mim, Felipe Ribeiro, na PHP Conference Brasil 2009 mostrando os novos recursos do PHP 5.3 no que diz respeito a estruturas de dados
1) O documento apresenta um programa de treinamento em programação funcional em Haskell, abordando tópicos como módulos, funções de ordem superior, e o desafio de implementar a cifra de César em Haskell.
2) São apresentadas funções como map, filter, foldr que mapeiam, filtram e dobram listas, respectivamente. Também são explicadas funções de composição e predicados com all e any.
3) Como desafio, o aluno deve implementar em Haskell a cifra de César, um método simples de criptograf
Este documento apresenta uma introdução aos principais tipos de dados em Python, incluindo números, strings, listas, tuplas, conjuntos, dicionários e funções como map, filter e reduce. Demonstra como manipular esses tipos de dados com exemplos de inicialização, iteração, ordenação, filtragem e redução.
1) O documento introduz a linguagem R, abordando sua história, instalação, editores de texto, manipulação de objetos, entrada e saída de dados, e distribuições de probabilidade.
2) São apresentados conceitos sobre modos e atributos de objetos no R, como vetores, matrizes, listas e data frames.
3) O documento também explica a importação e exportação de dados, e como gerar gráficos e saídas em diferentes formatos a partir do R.
1) O documento discute programação funcional, incluindo funções como valores, programação sem efeitos colaterais, funções de ordem superior e Scheme.
2) Apresenta exemplos de funções em Scheme, incluindo ordenação de listas usando diferentes critérios de comparação.
3) Demonstra como funções podem receber e retornar outras funções, e como isso permite a criação de funções mais gerais.
O documento descreve as principais características da linguagem Swift da Apple para desenvolvimento no iOS, incluindo: 1) variáveis e constantes; 2) tipos de dados como Strings, Inteiros e Ponto Flutuante; 3) Coleções como Arrays e Dictionaries; 4) Estruturas, Classes, Enumerações e Protocolos; 5) Funções e Controle de Fluxo. O foco é apresentar os principais conceitos da linguagem de forma concisa.
O documento resume os principais tipos de dados e operadores em C#. Apresenta tipos primitivos como int, float e bool e tipos complexos como arrays, enumerações e estruturas. Descreve também operadores aritméticos, relacionais e lógicos e declarações como if/else e laços de repetição.
Este documento apresenta um curso introdutório sobre Python. Ele inclui seções sobre blocos, controle de fluxo, funções, tratamento de exceções, estruturas de dados como listas e dicionários, e módulos. O documento fornece exemplos de código Python para ilustrar os principais conceitos da linguagem.
O documento discute conceitos de orientação a objetos em Python, definindo objetos como componentes de software que incluem dados e comportamentos. Explica que classes definem tipos de objetos abstratos e instâncias de classes são objetos concretos. Demonstra a criação de uma classe Cao e instância rex para ilustrar a relação entre classe e objeto.
O documento descreve as principais novidades da Java 8, incluindo lambdas, métodos de referência, interfaces funcionais, melhorias na API Stream e na API de datas com o pacote java.time. O foco é explicar 5 dessas features chave: lambdas, métodos de referência, métodos default, API Stream e a nova API de datas no pacote java.time.
Estruturas de Dados - Listas Encadeadas (Linked List)Erick Petrucelli
Este documento discute estruturas de dados, incluindo estruturas lineares como pilhas, filas e listas, e não-lineares como tabelas de espalhamento e árvores. Ele se concentra em listas encadeadas, definindo uma classe Node para representar cada nó e uma classe LinkedList para implementar operações como inserção e remoção de nós em qualquer posição da lista.
O documento apresenta técnicas de programação funcional em F# e Scala, como funções de alta ordem, imutabilidade, pattern matching e avaliação preguiçosa. Estas técnicas permitem maior confiabilidade no código e facilitam a manipulação de listas e estruturas de dados de forma funcional.
O documento discute as características da tipagem dinâmica que o Java não possui, como variáveis sem tipo e checagem de tipos em tempo de execução. Também aborda conceitos como duck typing, funções de primeira classe, closure e list comprehension, presentes em linguagens de tipagem dinâmica como Python, Ruby e Javascript.
Palestra sobre persistência de dados no SQLite com Room API apresentada no TDC São Paulo 2017 (19/07/2017). O Room é um dos Architectural Components apresentados pelo Google no Google I/O 2017.
Este documento discute os motivos pelos quais o autor gosta da linguagem Scala. Brevemente aborda conceitos como programação funcional, concorrência, atores e como Scala suporta esses paradigmas de maneira elegante.
Bogosort e Técnicas Realmente Avançadas de ProgramaçãoRodolpho Eckhardt
Este documento discute vários tópicos relacionados a programação Python, incluindo:
1) Uso de bound methods para substituir lookups globais por lookups locais;
2) Otimização de código através de vectorização e uso de lambdas;
3) Problemas com o uso de kwargs mutáveis.
O documento discute dobras em Haskell usando as funções foldl, foldr, foldl1 e foldr1. Explica que foldl dobra da esquerda para a direita enquanto foldr dobra da direita para a esquerda. Apresenta exemplos mostrando como essas funções dobram listas e como lidam com valores iniciais.
O documento descreve diferentes tipos de operadores, variáveis e comandos utilizados em shells do Linux, incluindo operadores aritméticos, relacionais, lógicos e de atribuição, variáveis especiais, expansão de variáveis, redirecionamento de entrada e saída e formatadores para comandos como date e printf.
Semelhante a Por que dizemos que Scala é uma linguagem funcional? (20)
As classes de modelagem podem ser comparadas a moldes ou
formas que definem as características e os comportamentos dos
objetos criados a partir delas. Vale traçar um paralelo com o projeto de
um automóvel. Os engenheiros definem as medidas, a quantidade de
portas, a potência do motor, a localização do estepe, dentre outras
descrições necessárias para a fabricação de um veículo
A linguagem C# aproveita conceitos de muitas outras linguagens,
mas especialmente de C++ e Java. Sua sintaxe é relativamente fácil, o que
diminui o tempo de aprendizado. Todos os programas desenvolvidos devem
ser compilados, gerando um arquivo com a extensão DLL ou EXE. Isso torna a
execução dos programas mais rápida se comparados com as linguagens de
script (VBScript , JavaScript) que atualmente utilizamos na internet
18. • Estratégia
de avaliação que satisfaz ambas as
propriedades abaixo:
•A avaliação da expressão é atrasada até que o
valor seja necessário (non-strict evaluation)
• Avaliações repetidas são evitadas (sharing)
19. CALL BY NAME
def loop(condition: => Boolean)(expression: => Unit) {
if (condition) {
expression
loop(condition)(expression)
}
}
20. CALL BY NAME
def loop(condition: => Boolean)(expression: => Unit) {
if (condition) {
expression
loop(condition)(expression)
}
}
21. CALL BY NAME
def loop(condition: => Boolean)(expression: => Unit) {
if (condition) {
expression
loop(condition)(expression)
}
}
var i = 0;
loop(i < 5) { println(i); i=i+1 }
22. CALL BY NAME
def loop(condition: => Boolean)(expression: => Unit) {
if (condition) {
expression
loop(condition)(expression)
}
}
var i = 0;
loop(i < 5) { println(i); i=i+1 }
0
1
2
3
4
23. CALL BY NAME
def loop(condition: => Boolean)(expression: => Unit) {
if (condition) {
expression
loop(condition)(expression)
}
}
var i = 0;
loop(i < 5) { println(i); i=i+1 }
0
1
2 (apenas non-strict evaluation)
3
4
24. LAZY VALS
scala> lazy val x = { println("avaliou x"); "XXX" }
x: java.lang.String = <lazy>
scala> lazy val y = { println("avaliou y"); "YYY" }
y: java.lang.String = <lazy>
25. LAZY VALS
scala> lazy val x = { println("avaliou x"); "XXX" }
x: java.lang.String = <lazy>
scala> lazy val y = { println("avaliou y"); "YYY" }
y: java.lang.String = <lazy>
26. LAZY VALS
scala> lazy val x = { println("avaliou x"); "XXX" }
x: java.lang.String = <lazy>
scala> lazy val y = { println("avaliou y"); "YYY" }
y: java.lang.String = <lazy>
scala> if (true) x else y
27. LAZY VALS
scala> lazy val x = { println("avaliou x"); "XXX" }
x: java.lang.String = <lazy>
scala> lazy val y = { println("avaliou y"); "YYY" }
y: java.lang.String = <lazy>
scala> if (true) x else y
avaliou x
res0: java.lang.String = XXX
28. LAZY VALS
scala> lazy val x = { println("avaliou x"); "XXX" }
x: java.lang.String = <lazy>
scala> lazy val y = { println("avaliou y"); "YYY" }
y: java.lang.String = <lazy>
scala> if (true) x else y
avaliou x
res0: java.lang.String = XXX
scala> if (true) x else y
29. LAZY VALS
scala> lazy val x = { println("avaliou x"); "XXX" }
x: java.lang.String = <lazy>
scala> lazy val y = { println("avaliou y"); "YYY" }
y: java.lang.String = <lazy>
scala> if (true) x else y
avaliou x
res0: java.lang.String = XXX
scala> if (true) x else y
res1: java.lang.String = XXX