# Типы данных и литералы

Все значения в языке относятся к одному из типов данных. Тип данных определяет допустимые значения и операции над этими значениями. В языке уже имеется несколько определённых типов данных. Рассмотрим некоторые из них. Если какое-либо значение прописано прямо в коде, то оно называется _литералом_.

#### Тип Number

К этому типу относятся числа. Примеры литералов типа Number:

```fsharp
5
5.7
0.234
100_000_000 // в литерале могут быть нижние подчёркивания,
            // они могут использоваться для разделения разрядов
            // и не влияют на значение
```

Числа можно складывать, умножать, вычитать, превращать в строку и т.д.

```fsharp
println (4 + 5) //-> 9 сложение
println (3 * 2) //-> 6 умножение
println (1 / 2) //-> 0.5 деление
println (-1)    //-> -1 унарный минус
println (5 ^ 2) //-> 25 возведение в степень
```

Чтобы преобразовать число в строку нужно воспользоваться функцией `Number.toText`:

```fsharp
println (Number.toText 6.4) //-> 6.4
```

#### Тип Text

Этот тип необходим для представления в программе строк. Текстовые литералы начинаются с символа двойной кавычки и заканчиваются им же:

```fsharp
println "xxx" //-> xx
```

Если в текст нужно добавить сам знак кавычки, его нужно написать после символа обратного слеша. Это называется экранированием.

```fsharp
println "this is \" symbol" //-> this is " symbol
```

В текст также можно вставлять произвольные выражения языка. Результат этих выражений будет в результирующей строке, они должны заключаться в `\(` и `)`

```fsharp
println "1 + 2 = \(1 + 2)" //-> 1 + 2 = 3
```

Это называется строковой интерполяцией.

Литерал также может быть многострочным

```fsharp
println "First line
Second line"

//-> First line
// Second line
```

Вы можете расположить его на нескольких строках, а сам перенос экранировать, тогда текст будет восприниматься как однострочный:

```fsharp
println "First line \
Also first line" //-> First line Also first line
```

Для строк также определён ряд операторов:

```fsharp
println ("x" + "y") //-> xy (сложение)
println (*"xxx") //-> 3 (длина строки)
println ("x" * 4) //-> xxxx (повторение строки)
```

И ряд функций модуля Text:

```fsharp
println (Text.toUpper "xy") //-> XY (переводит в верхний регистр)
println (Text.reverse "xy") //-> yx (переворачиает строку)
println (Text.parseNumber "5") //-> Some 5 (превращает  строку в число)
```

#### Тип Boolean

Представляет логические данные. Может иметь значение true или false. Используется для ряда более сложных конструкций, значение этого типа возвращает большинство операторов сравнения:

```fsharp
println (5 = 5) //-> true
println (3 > 7) //-> false
println ("x" = "x") //-> true
println (true = false) //-> false
```

В тип Boolean может конвертироваться любой другой тип.

#### Тип List

Тип List является сложным типом, его значение - это список с элементами любого типа.

```fsharp
println [4, 5, true] //-> [4, 5, true]
```

Вложенные списки также доступны:

```fsharp
println [[0,0], [1,0], [0,1]] //-> [[0, 0], [1, 0], [0, 1]]
```

Для список определён ряд операторов и функций в модуле List

```
println ([4, 5, 6] + [7, 8, 9]) //-> [4, 5, 6, 7, 8, 9]
println (*[5, 6, 7]) //-> 3
```
