Compartilhar via


Valores

Os valores em F# são quantidades que têm um tipo específico; os valores podem ser números de ponto integral ou flutuante, caracteres ou texto, listas, sequências, matrizes, tuplas, uniões discriminadas, registros, tipos de classe ou valores de função.

Associar um valor

A associação de termo significa associar um nome a uma definição. A let palavra-chave associa 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 um valor é inferido da definição. Para um tipo primitivo, como um número de ponto integral ou flutuante, o tipo é determinado do tipo do 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 retornado no corpo da função. Para obter mais informações sobre tipos de valor de função, consulte Functions. Para obter mais informações sobre tipos literais, consulte Literais.

O compilador não emite diagnóstico sobre associações não utilizados por padrão. Para receber essas mensagens, habilite o aviso 1182 no arquivo de projeto ou ao invocar o compilador (consulte --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 você estiver acostumado com linguagens como C++, Visual Basic ou C#, talvez seja surpreendente que f# coloque primazia sobre valores imutáveis em vez de variáveis que podem ser atribuídas novos valores durante a execução de um programa. Dados imutáveis são um elemento importante da programação funcional. Em um ambiente multithreaded, variáveis mutáveis compartilhadas que podem ser alteradas por muitos threads diferentes são difíceis de gerenciar. Além disso, com variáveis mutáveis, às vezes pode ser difícil saber 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 se comportam estritamente como funções matemáticas. Quando o código em uma linguagem de procedimento usa uma atribuição de variável para alterar um valor, o código equivalente em uma linguagem funcional tem um valor imutável que é a entrada, uma função imutável e valores imutáveis diferentes como a saída. Essa rigidez matemática permite um raciocínio mais rígido sobre o comportamento do programa. Esse raciocínio mais rígido é o que permite que os compiladores verifiquem o código de forma mais rigorosa e otimizem com mais eficiência e ajudam a facilitar a compreensão e a gravação do código correto para os desenvolvedores. Portanto, é provável que o código funcional seja mais fácil de depurar do que o código de procedimento comum.

F# não é uma linguagem funcional pura, mas dá suporte total à programação funcional. Usar valores imutáveis é uma boa prática, pois fazer isso permite que seu código se beneficie de um aspecto importante da programação funcional.

Variáveis mutáveis

Você pode usar a palavra-chave mutable para especificar uma variável que pode ser alterada. Variáveis mutáveis em F# geralmente devem ter um escopo limitado, seja como um campo de um tipo ou como um valor local. Variáveis mutáveis com um escopo limitado são mais fáceis de controlar e são menos propensas a serem modificadas de maneiras incorretas.

Você pode atribuir um valor inicial a uma variável mutável usando a let palavra-chave da mesma forma que definiria um valor. No entanto, a diferença é que, posteriormente, você pode atribuir novos valores a variáveis mutáveis usando o <- operador, como no exemplo a seguir.

let mutable x = 1
x <- x + 1

Os valores marcados mutable poderão ser promovidos automaticamente se 'a ref capturados por um fechamento, incluindo formulários que criam fechamentos, como seq construtores. Se você quiser ser notificado quando isso ocorrer, habilite o aviso 3180 no arquivo de projeto ou ao invocar o compilador.

Título Descrição
permitir associações Fornece informações sobre como usar a let palavra-chave para associar nomes a valores e funções.
Funções Fornece uma visão geral das funções em F#.

Consulte também