Giter VIP home page Giter VIP logo

scala-fmi-2021's Introduction

Функционално програмиране за напреднали със Scala

Лекции

  • 01 – За курса
  • 02 – Въведение във функционалното програмиране със Scala [код]
    • Scala инструменти
      • scala, scalac, REPL
      • sbt, конфигурация, компилиране, стартиране и тестване
      • добавяне на библиотеки
    • Типове и литерали
    • Дефиниции – val, var, def, type, функции. Type inference
    • Файлове и пакети
    • Стойностите като обекти (с методи)
    • if контролна структура
    • "Всичко е израз или дефиниция". Контролните структури и блоквете като изрази
    • Типова йеархия. Any, AnyVal, AnyRef, Unit, Null, Nothing
    • Java Memory Model
    • Контролни структури със странични ефекти – while, try/catch (и изключения), for
    • Още контролни структури без странични ефекти – pattern matching, (функционален) for
    • Съставни типове
      • хетерогенни – наредени n–торки (tuples)
      • хомогенни – Range, List[A], Set[A], Map[K, V]
    • Операции над хомогенни колекции – isEmpty, head, tail, take, drop
    • Помощен синтаксис при функции
      • типови параметри (generics)
      • overloading
      • default стйности на параметри
      • именувани аргументи
      • променлив брой параметри
    • Функционално програмиране
      • математически функции
      • функционално срещу императивно програмиране
      • характеристики на функционалните програми
      • Substitution модел на изчисление. Предаване на параметрите по стойност и по име
      • Референтна прозрачност
  • 03 – ООП във функционален език [код]
    • Обектно-ориентирано програмиране като система от обекти
      • Съобщения, енкапсулация и late-binding
      • ООП като концепция, ортогонална на ФП. ООП в Scala
    • Дефиниране на клас. Параметри на клас (конструктори), членове, модификатори на достъп
    • Дефиниране на обект
    • apply метод. Обекти, приложими като функции
    • Придружаващи обекти
    • implicit конверсии
    • case класове за дефиниране на неизминими value обекти
    • Абстрактни типове – trait
      • Uniform Access Principle
      • множествено наследяване
      • подтипов полиморфизъм
    • import и export клаузи
    • Обвиващи AnyVal класове. Type safety чрез обвиване на обикновени типове
    • Съвместимост на типове. Номинално и Структурно типизиране
    • Структурно типизиране в Scala
    • Типова алгебра. Обединение и сечение на типове
    • The Expression Problem в Scala. ООП срещу ФП конструкции
    • Extension методи – ретроактивно добавяне на методи към тип
    • Тестове
  • 04 – Основни подходи при функционалното програмиране [код]
    • Рекурсия
      • итерация чрез рекурсия
      • рекурсия и substitution модела
      • опашкова рекурсия. Рекурсия чрез акумулатори
      • рекурсия по колекции
    • Неизменимост и неизменими структури от данни
      • неизменими обекти във времето
      • persistence (персистентност) и structural sharing. Роля на Garbage Collector-а
      • персистентност и structural sharing при списък (List)
      • Vector – оптимизация за произволен достъп и добавяне на елементи в началото и в края. Ефективно константна сложност
      • чисто функционални структури от данни. Безопасно споделяне на такива структури между компоненти и нишки
      • Set и Map като чисто функционални структури
    • Функциите като първокласни обекти
      • ламбда синтаксис и функционален тип
      • преобразуване на def функции/методи към обектни функции – eta expansion
      • частично прилагане на аргументи
      • функции от по-висок ред. filter, map, reduce, fold
      • композиция на функции от по-висок ред
      • множество списъци с параметри.
        • групиране на параметри
        • type inference
        • създаване на собствени конструкции
        • currying
      • Операции с функции. Композиция, преобразуване към curried или tupled форми
    • Композиция на функции
    • Изразяване чрез типове
  • 05 – Fold и колекции
    • Абстракция чрез fold, foldLeft и foldRight. Изразяване на операции чрез тях
    • Йеархия и дизайн на колекциите в Scala.
      • Uniform Return Type principle
      • Колекциите като функции (примери за Seq, Set, Map)
    • Честични функции. Частични функции чрез case блокове
    • Още операции върху колекции – partition, span, splitAt; flatten, flatMap, zip, groupBy и други
    • Тайната за for конструкциите – синтактична захар върху map, flatMap и withFilter (filter)
    • Lazy колекции
      • нестриктни view-та на колекции
      • lazy списъци с мемоизация
    • Имплементация на LazyList
  • 06 – Pattern matching и алгебрични типове от данни (ADTs)
    • Pattern matching. Деструктуриране на обекти
    • Pattern matching на различни места
      • case блокове – при match или на мястата, където се очакват функции или частични функции. Примери с map и collect
      • pattern bindings – съпоставяне с единичен pattern при for (отляво на генератори и дефиници) и при val дефиниции
    • Алгебрични типове от данни. Примери
      • product типове. case класове, наредени n-торки и други
      • sum типове. Имплементация чрез sealed trait и enum
    • Type bounds (ограничения върху типовите параметри).
    • Вариантност. Ковариантност и контравариантност на типове. Вариантност при типовете за функции. Още примери
    • Изразяване на опционалност. null като грешка за милиард долара. Имплементация на Option тип
    • Полезни операции върху Option. Използване на операции вместо pattern matching
    • Деструктуриране чрез екстрактори. Използването им в pattern matching тук
  • 07 – Ефекти и функционална обработка на грешки
    • Функционален дизайн – премахване на нелегалните състояния
    • От частични към тотални функции
    • Ефекти
    • Видове ефекти – частичност, изключения/грешки, недетерминизъм, зависимости/конфигурация, логване, изменяемо състояние, вход/изход, асинхронност, и други. Типове зад тях
    • Проблемите при изключенията
    • Моделиране на грешни състояние чрез Option, Try и Either
      • замяна на изключенията с безопасни и композитни ефекти
      • моделиране на грешките като домейн структури и домейн логика
    • Ефект за вход/изход. IO. Предимства на IO
    • Разделение на чисто функционално композитно изграждане на план (без странични ефекти) от изпълнение на плана (водещо до странични ефекти)
  • 08 – Конкурентност [код]

Ресурси

Генериране на лекции

Setup

Имате нужда от инсталиран pandoc.

Проектът има submodule зависимост към reveal.js. При/след клониране на репото инициализирайте модулите:

git submodule update –init

Local with Reaveal + Markdown

To be able to successfully load .md files w/ the Markdown plugin and no co policy pass the –allow-file-access-from-files flag for google chrome. If you use a real browser and not google chrome you are clearly an adult and can figure out how to fix it for yourself.

Генериране на конретна лекция

cd lectures
./generate-presentation.sh <лекция>

Генериране на всички лекции

cd lectures
./build.sh

scala-fmi-2021's People

Contributors

bbsbb avatar vdichev avatar viktormarinov avatar zstoychev avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.