• F# меня испортил, или почему я больше не хочу писать на C#

      Раньше я очень любил C#


      Это был мой основной язык программирования, и каждый раз, когда я сравнивал его с другими, я радовался тому, что в свое время случайно выбрал именно его. Python и Javascript сразу проигрывают динамической типизацией (если к джаваскрипту понятие типизации вообще имеет смысл применять), Java уступает дженериками, отстутствием ивентов, value-типов, вытекающей из этого карусели с разделением примитивов и объектов на два лагеря и зеркальными классами-обертками вроде Integer, отсутствием пропертей и так далее. Одним словом — C# клевый.


      Отдельно отмечу, что я сейчас говорю о самом языке и удобстве написания кода на нем.
      Тулинг, обилие библиотек и размер сообщества я сейчас в расчет не беру, потому что у каждого
      из этих языков они развиты достаточно, чтобы промышленная разработка была комфортной в большинстве случаев.


      А потом я из любопытства попробовал F#.

      Читать дальше →
    • Функциональное мышление. Часть 3

      • Перевод

      Подъехала третья часть из серии статей по функциональному программированию. Сегодня мы расскажем обо всех типах этой парадигмы и на примерах покажем их использование. Подробнее о примитивных типах, обобщенных типах и многом другом под катом!


      Читать дальше →
      • +18
      • 7,1k
      • 3
    • Проектирование типами: Как сделать некорректные состояния невыразимыми

      • Перевод

      Представляю вашему вниманию перевод статьи Scott Wlaschin "Designing with types: Making illegal states unrepresentable".


      В этой статье мы рассмотрим ключевое преимущество F# — возможность "сделать некорректные состояния невыразимыми" при помощи системы типов (фраза заимствована у Yaron Minsky).


      Рассмотрим тип Contact. В результате проведённого рефакторинга он сильно упростился:


      type Contact = 
          {
          Name: Name;
          EmailContactInfo: EmailContactInfo;
          PostalContactInfo: PostalContactInfo;
          }

      Теперь предположим, что существует простое бизнес-правило: "Контакт должен содержать адрес электронной почты или почтовый адрес". Соответствует ли наш тип этому правилу?


      Нет. Из правила следут, что контакт может содержать адрес электронной почты, но не иметь почтового адреса, или наоборот. Однако в текущем виде тип требует, чтобы были заполнены оба поля.


      Кажется, ответ очевиден — сделать адреса необязательными, например, так:


      type Contact = 
          {
          Name: PersonalName;
          EmailContactInfo: EmailContactInfo option;
          PostalContactInfo: PostalContactInfo option;
          }

      Но теперь наш тип допускает слишком многое. В этой реализации можно создать контакт вообще без адреса, хотя правило требует, чтобы хотя бы один адрес был указан.


      Как же решить эту задачу?

      Читать дальше →
    • Змея в почтовом ящике и при чем тут F#

      О чем это все?


      Это все про змейку. Все прекрасно помнят, что такое змейка: на прямоугольном поле движется змея. Находит еду — вырастает в длине, находит себя или границу поля — умирает. А пользователь может только слать команды: влево, вправо, вверх, вниз.
      Я решил добавить сюда немного экшна и заставить змею убегать от пакманов. И все это на акторах!


      Поэтому сегодня я на примере змейки расскажу о том, как построить модель акторов с помощью MailboxProcessor из стандартной библиотеки, на какие моменты обратить внимание, и какие подводные камни вас могут ожидать.


      Код, написанный здесь, не идеален, может нарушать какие-то принципы и может быть написан лучше. Но если вы новичок и хотите разобраться с мейлбоксами — надеюсь, эта статья вам поможет.
      Если вы про мейлбоксы все знаете и без меня — вам тут может быть скучно.


      Почему акторы?


      Ради практики. Про модель акторов я читал, смотрел видео, мне все понравилось, но сам не пробовал. Теперь попробовал.
      Несмотря на то, что по сути выбрал технологию ради технологии, концепция очень удачно легла на эту задачу.


      Почему MailboxProcessor, а не, например, Akka.net?


      Для моей задачи акка — это из орбитальной станции по воробьям, MailboxProcessor гораздо проще, да и входит в стандартную библиотеку, так что никаких пакетов подключать не нужно.

      Читать дальше →
      • +18
      • 4,1k
      • 5
    • Зачем изучать непопулярные языки. Пример сообщества F#



        Бывают культовые фильмы, игры, книги или музыка — их страшно любит сплоченное сообщество, профессионалы и критики. Но коммерческого успеха и широкой популярности нет. Мне в таких ситуациях обычно до боли обидно.

        В разработке хорошие технологии тоже не всегда становятся массовыми. Например, F#. Все что я о нем знаю — это дико крутой, но совершенно непопулярный язык, после которого разработчики уже не могут просто так возвращаться к своим привычным языкам.

        Я попытался узнать, в чем причина. И вообще — кто те люди, которые на нем пишут, и зачем они это делают, если язык не нужен бизнесу? Для этого я постучался поговорить в русскоязычное сообщество F# в «Телеграме». Здесь — наш круглый стол.
        Читать дальше →
      • Распараллеливание задач с зависимостями —  пример на .NET

        • Перевод
        Здравствуйте, коллеги!

        На этой неделе мы отдали в перевод амбициозную по своей сложности книгу "Concurrency in .NET" издательства Manning:



        Автор любезно выложил на сайте Medium отрывок из 13-й главы, который мы и предлагаем оценить задолго до премьеры.
        Приятного чтения!
        Читать дальше →
      • Функциональное мышление. Часть 2

        • Перевод

        Друзья, продолжаем разбираться в функциональном программировании. Во второй части из этой серии статей вы познакомитесь с основными принципами этой парадигмы разработки и поймёте, как этот подход отличается от объектно-ориентированного или императивного программирования.


        Читать дальше →
      • Функциональное мышление. Часть 1

        • Перевод

        В этой серии статей вы познакомитесь с основными принципами функционального программирования и поймёте, что значит «мыслить функционально» и как этот подход отличается от объектно-ориентированного или императивного программирования.


        Читать дальше →
      • Поэтапная настройка Continuous Integration (build, test, deploy) для .NET Core WebApp + GitHub

        • Tutorial

        Поэтапная настройка Continuous Integration (build, test, deploy) для .NET Core WebApp + GitHub




        Всем привет. Continuous Integration (CI) давным-давно проник в мир разработки программного обеспечения и для многих является его неотъемлемой частью, которое позволяет создавать более качественный код сохраняя при этом удобство разработки. И, если поначалу, настройка CI требовала значительных усилий и денег, то сейчас это стало намного доступнее, проще и даже бесплатно. Если вам интересно, как настроить CI для своего .NET Core open-source проекта, прошу под кат.


        Disclaimer


        В статье будет много ссылок, тривиальных моментов и отступлений, не вините автора за это, никогда не знаешь на чем читающий споткнется.


        Несмотря на то, что основным языком демонстрационного проекта выбран F#, руководство полностью совместимо с проектами написанными на C#. F# выбран т.к. эта статья и связанный с ней репозиторий является основой для второй публикации — "Строим полноценное веб приложение на F# + Giraffe с нуля.", которая запланирована на июнь.

        Читать дальше →
        • +10
        • 5,2k
        • 4
      • Знакомство с Gjallarhorn.Bindable.WPF (F#) на примере выполнения тестового задания

        В статьях на русском языке теме использования F# совместно с WPF уделяют немного внимания.


        Сегодня я попробую познакомить вас с одной из F# библиотек, которая значительно упрощает такую разработку.


        В качестве демонстрационного примера возьмем одно из тестовых заданий по WPF, которые дают соискателям на должность Junior-разработчика для проверки их знаний.


        Само задание звучит так


        Необходимо разработать приложение с использованием данных, представленных в файле Students.xml.

        Указанный файл содержит следующие сведения о студентах: фамилия, имя, возраст, пол.

        Конечно, есть дополнительные рекомендации и ограничения на реализацию, но не будем копировать их целиком. Основные части будут приведены в тексте при необходимости, а полная версия доступна здесь

        Читать дальше →
        • +20
        • 2,7k
        • 2

      Самое читаемое