Оглавление
Вступительное слово
Предисловие
Часть I. Мультипарадигмальное программирование
Глава 1. Введение в F#
Знакомство с F#
Visual Studio 2010
Ваша вторая программа на F#
Значения
Пробельные символы имеют значение
.NET Interop
Комментарии
F# Interactive
Управление файлами с исходными кодами F#
Глава 2. Основы
Элементарные типы
Элементарные числовые типы
Арифметика
Функции преобразования
Тип bigint
Битовые операции
Символы
Строки
Булевы значения
Сравнивание и равенство
Функции
Вывод типов
Обобщенные функции
Область видимости
Управление потоком выполнения
Основные типы
Тип unit
Кортежи
Списки
Агрегатные операторы
Тип option
Функция printfn
Строение программы на языке F#
Модули
Пространства имен
Запуск программы
Глава 3. Функциональное программирование
Программирование с помощью функций
Неизменяемость
Функции как значения
Рекурсивные функции
Символьные операторы
Композиция функций
Сопоставление с образцом
Отсутствие совпадений
Именованные образцы
Сопоставление с литералами
Ограничение when
Группировка образцов
Сопоставление структур данных
За пределами выражений сопоставления
Альтернативный синтаксис лямбда-выражений
Размеченные объединения
Использование размеченных объединений для создания древовидных структур
Сопоставление с образцом
Методы и свойства
Записи
Клонирование записей
Сопоставление с образцом
Вывод типов
Методы и свойства
Отложенные вычисления
Типы Lazy
Последовательности
Выражения последовательности
Функции модуля Seq
Агрегатные операторы
Глава 4. Императивное программирование
Понятие памяти в .NET
Значимые типы и ссылочные типы
Значения по умолчанию
Совмещение имен ссылочных типов
Изменение значений
Ссылочные ячейки
Изменяемые записи
Массивы
Обращение к элементам массива
Срезы массивов
Создание массивов
Сопоставление с образцом
Эквивалентность массивов
Функции модуля Array
Многомерные массивы
Типы изменяемых коллекций
List
Циклы
Циклы while
Циклы for
Исключения
Обработка исключений
Повторная генерация исключений
Определение новых типов исключений
Глава 5. Объектно­ориентированное программирование
Программирование с применением объектов
Преимущества ООП
Недостатки ООП
System.Object
Общие методы
Эквивалентность объектов
Сгенерированная эквивалентность
Классы
Явное создание
Неявное создание классов
Обобщенные классы
Собственный идентификатор
Методы и свойства
Свойства
Установка значений свойств в конструкторе
Методы
Статические методы, свойства и поля
Перегрузка методов
Модификаторы доступа
Наследование
Переопределение методов
Категории классов
Приведение типов
Глава 6. Программирование на платформе .NET
Платформа .NET
CLI
Сборка мусора
Интерфейсы
Использование интерфейсов
Определение интерфейсов
Объектные выражения
Реализация интерфейсов с помощью объектных выражений
Создание производных классов с помощью объектных выражений
Методы расширения
Расширение модулей
Перечисления
Создание перечислений
Преобразование
Когда использовать перечисления, а когда размеченные объединения
Структуры
Создание структур
Ограничения
Когда использовать структуры, а когда записи
Глава 7. Прикладное функциональное программирование
Единицы измерения
Определение единиц измерения
Преобразование единиц измерения
Обобщенные единицы измерения
Активные шаблоны
Одновариантные активные шаблоны
Частичные активные шаблоны
Параметризованные активные шаблоны
Многовариантные активные шаблоны
Использование активных шаблонов
Использование модулей
Преобразование модулей в классы
Намеренное сокрытие
Управление порядком использования модулей
Работа со списками
Операции над списками
Использование списков
Хвостовая рекурсия
Стек
Введение в хвостовую рекурсию
Шаблоны хвостовой рекурсии
Программирование с применением функций
Карринг
Избавление от избыточного кода
Замыкания
Функциональные шаблоны проектирования
Мемоизация
Функции как изменяемые значения
Отложенные вычисления
Глава 8. Прикладное объектно-ориентированное программирование
Операторы
Перегрузка операторов
Индексаторы
Добавление срезов
Ограничения обобщенных типов
Делегаты и события
Определение делегатов
Объединение делегатов
События
Создание событий
Класс Event
Модуль Observable
Создание событий .NET
Часть II. Программирование на языке F#
Глава 9. Сценарии
Файлы сценариев на языке F#
Директивы
Общие директивы
Директивы сценариев
Рецепты по созданию сценариев
Выделение цветом
Воспроизведение звука
Обход дерева каталогов
Простой запуск процессов
Автоматизация операций в Microsoft Office
Глава 10. Вычислительные выражения
На пути к вычислительным выражениям
Построители вычислительных выражений
Собственные построители вычислительных выражений
Асинхронные вычислительные выражения
Вычислительное выражение округления
Вычислительное выражение, сохраняющее состояние
Глава 11. Асинхронное и параллельное программирование
Работа с потоками
Запуск потоков
Пул потоков .NET
Разделяемые данные
Асинхронное программирование
Асинхронные вычислительные выражения
Библиотека Async
Асинхронные операции
Создание собственных асинхронных примитивов
Ограничения
Параллельное программирование
Parallel.For
Модуль Array.Parallel
Библиотека PFX
Примитивы
Параллельные структуры данных
Глава 12. Рефлексия
Атрибуты
Применение атрибутов
Определение новых атрибутов
Рефлексия типов
Получение информации о типе
Рефлексия типов языка F#
Динамическое создание экземпляров
Создание экземпляров
Создание экземпляров типов языка F#
Динамический вызов
Оператор "знак вопроса"
Использование рефлексии
Декларативное программирование
Расширяемая архитектура
Глава 13. Цитирование
Основы цитирования
Декомпозиция цитируемых выражений
Цитирование тела метода
Декомпозиция произвольного кода
Практическое применение: перенос вычислений на другие платформы
Создание цитируемых выражений
Подстановка выражений
Выполнение цитируемых выражений
Практическое применение: создание производных
Приложение A. Обзор библиотек .NET
Визуализация
Windows Forms
Windows Presentation Foundation
Обработка данных
Регулярные выражения
Работа с XML
Сохранение данных
Файлы
Сериализация данных
Десериализация
Стандартная библиотека языка F#
FSharp.Core.dll
F# PowerPack
Приложение B. Взаимодействие программ на F# с кодом на других языках .NET
Взаимодействие с другими языками .NET
Использование кода F# в программах на языке C#
Использование кода C# в программах на языке F#
Взаимодействие с неуправляемым кодом
Platform Invoke
COM
Алфавитный указатель