As funções são os blocos de construção básicos de um estilo de programação chamado Programação Funcional. O Scala combina orientação a objetos, conhecido do Java, e a programação funcional. Em Scala, uma expressão lambda é um bloco básico de construção chamado de 'função' ou 'literal de função'. As funções em Scala são cidadãos de primeira classe (first class citizens). Elas podem ser atribuídas a vals ou vars (variáveis final ou não final), podem ser passadas como argumento para outra função, e podem ser combinadas para formar novas funções.
Por exemplo, a expressão lambda anterior em Java, calculando a diferença de tamanho entre duas Strings, é escrita em Scala como:
Em Scala, as literais de função são também closures. Elas podem acessar as variáveis definidas fora dos seus escopos léxicos.
Esse exemplo resultaria em 20. Atribuindo uma literal de função para uma variável chamada myFuncLiteral.
As similaridades sintática e semântica entre as expressões lambda do Java 8 e das funções em Scala são notáveis. Semanticamente são exatamente iguais, enquanto que sintaticamente diferem-se apenas no símbolo da seta (Java8: -> Scala: =>) e a notação abreviada, que ainda não foi apresentada.
A grande vantagem das literais de função é passá-las como qualquer outra literal, como uma String ou um Object arbitrário. Isso oferece uma vasta gama de possibilidades e permite construir códigos altamente compactos e reutilizáveis.
Quando uma literal de função é passada para um método, basicamente é um método que aceita um método via parâmetro. Tais métodos são chamados de funções de ordem superior. O método addActionListener no código de exemplo Swing anterior é exatamente um desses. Também é possível definir as funções de ordem superior, que podem oferecer muitos benefícios. Exemplo: