Valores
Valores em F# são quantidades que têm um tipo específico; os valores podem ser números de pontos integrais ou flutuantes, caracteres ou textos, listas, sequências, matrizes, tuples, sindicatos discriminados, registos, tipos de classe ou valores de função.
Encadernação de um valor
O termo vinculativo significa associar um nome a uma definição. A let
palavra-chave liga um valor, como nos seguintes exemplos:
let a = 1
let b = 100u
let str = "text"
// A function value binding.
let f x = x + 1
O tipo de valor é deduzido da definição. Para um tipo primitivo, como um número de ponto integral ou flutuante, o tipo é determinado a partir do tipo de literal. Portanto, no exemplo anterior, o compilador infere o tipo de b
ser unsigned int
, enquanto o compilador infere o tipo de a
ser int
. O tipo de valor de função é determinado a partir do valor de retorno no corpo da função. Para obter mais informações sobre tipos de valor de função, consulte Funções. Para obter mais informações sobre tipos literais, consulte Literal.
O compilador não emite diagnósticos sobre encadernações não usudas por padrão. Para receber estas mensagens, ative o aviso 1182 no seu ficheiro do projeto ou ao invocar o compilador (ver --warnon
em Opções do Compilador).
Por que imutável?
Valores imutáveis são valores que não podem ser alterados ao longo da execução de um programa. Se estiver habituado a idiomas como C++, Visual Basic ou C#, poderá achar surpreendente que F# coloque primazia sobre valores imutáveis em vez de variáveis que podem ser atribuídas a novos valores durante a execução de um programa. Os dados imutáveis são um elemento importante da programação funcional. Num ambiente multi-liso, variáveis mutáveis partilhadas que podem ser alteradas por muitos fios diferentes são difíceis de gerir. Além disso, com variáveis mutáveis, às vezes pode ser difícil dizer se uma variável pode ser alterada quando é passada para outra função.
Em linguagens funcionais puras, não há variáveis, e as funções comportam-se estritamente como funções matemáticas. Quando o código numa linguagem processual utiliza uma atribuição variável para alterar um valor, o código equivalente numa linguagem funcional tem um valor imutável que é a entrada, uma função imutável e diferentes valores imutáveis como a saída. Este rigor matemático permite um raciocínio mais apertado sobre o comportamento do programa. Este raciocínio mais apertado é o que permite aos compiladores verificar o código de forma mais rigorosa e otimizar de forma mais eficaz, e ajuda a facilitar aos desenvolvedores a compreensão e a escrita de código correto. O código funcional é, portanto, suscetível de ser mais fácil de depurar do que o código processual normal.
F# não é uma linguagem funcional pura, mas suporta totalmente a programação funcional. A utilização de valores imutáveis é uma boa prática porque fazê-lo permite que o seu código beneficie de um aspeto importante da programação funcional.
Variáveis Mutáveis
Pode utilizar a palavra-chave mutable
para especificar uma variável que pode ser alterada. As variáveis mutáveis em F# devem geralmente ter um âmbito limitado, quer como campo de um tipo, quer como valor local. Variáveis mutáveis com âmbito limitado são mais fáceis de controlar e são menos suscetíveis de serem modificadas de forma incorreta.
Pode atribuir um valor inicial a uma variável mutável utilizando a let
palavra-chave da mesma forma que definiria um valor. No entanto, a diferença é que pode posteriormente atribuir novos valores a variáveis mutáveis utilizando o <-
operador, como no exemplo seguinte.
let mutable x = 1
x <- x + 1
Os valores marcados mutable
podem ser automaticamente promovidos se 'a ref
capturados por um fecho, incluindo formas que criam encerramentos, como seq
construtores. Se desejar ser notificado quando isto ocorrer, ative o aviso 3180 no seu ficheiro do projeto ou ao invocar o compilador.
Tópicos relacionados
Título | Descrição |
---|---|
deixar encadernações | Fornece informações sobre a utilização da let palavra-chave para vincular nomes a valores e funções. |
Funções | Fornece uma visão geral das funções em F#. |