- Какой функциональный язык программирования выбрать при изучении структур данных и алгоритмов?
- 5 языков функционального программирования, которые вы должны знать
- Что такое функциональное программирование?
- Функциональное и объектно-ориентированное программирование
- 1. JavaScript
- 2. Питон
- 3. Clojure
- 4. Вяз
- 5. Хаскелл
- Вы новичок в программировании?
- Какой функциональный язык программирования выбрать для изучения в свободное время?
Какой функциональный язык программирования выбрать при изучении структур данных и алгоритмов?
А теперь полная формулировка вопроса.
Я программирую на C# около 3-х лет.
В один прекрасный момент захотелось поподробнее изучить структуры данных и алгоритмы.
Изучая, программирую решения задач и реализовываю освоенные алгоритмы самостоятельно. Делать это на C# стало ужасно скучно (я это сразу осознал) и в связи с этим захотелось изучить новый язык программирования.
В целом, исключая C#, знаком с С++ и VB6.
Хочется ознакомиться с какой-то другой (не императивной) парадигмой программирования. В контексте изучения структур данных и алгоритмов я подумал, что логичнее будет изучить язык поддерживающий функциональное программирование. Но таких языков великое множество.
Отдельно хотелось бы коснуться F# и выделить его главный недостаток для меня: это язык из платформы .NET, а мне хотелось бы изучить язык не принадлежащий к этой платформе (причина проста: не хочется класть все яйца в одну корзину).
Однако, я не против услышать аргументы за F#, если Вам хотелось бы настоять на рекомендации изучать именно его.
Собственно, рекомендую Scheme в комплекте с книгой «Structure and Interpretation of Computer Programs» (Структура и Интерпретация Компьютерных Программ aka SICP) за авторством Харольда Абельсона и сотоварищей. Если читать внимательно и выполнять хотя бы часть заданий, то очень неплохо освоить можно функциональное программирование, и на изучение функциональных языков уйдёт на порядок меньше времени. Если хочется более актуального языка, то Haskell или Erlang.
5 языков функционального программирования, которые вы должны знать
Если вы потратите какое-то время на изучение тенденций программирования в Интернете, вы услышите о функциональном программировании. Термин встречается довольно часто, но что это значит?
Даже если вы знаете, что такое функциональное программирование, вам может быть неясно, какие языки лучше всего подходят для него. В конце концов, не все языки программирования созданы равными. Хотя вы можете применять парадигмы функционального программирования на многих языках, все же есть некоторые, где вы будете чувствовать себя намного комфортнее.
Что такое функциональное программирование?
Если у вас есть опыт в математике, у вас есть преимущество в функциональном программировании. Это связано с тем, что парадигма функционального программирования рассматривает вычисления как математические функции. Если у вас нет математического образования, это может привести вас в замешательство.
Программы для Windows, мобильные приложения, игры — ВСЁ БЕСПЛАТНО, в нашем закрытом телеграмм канале — Подписывайтесь:)
По сути, функциональное программирование рассматривает функции и данные как неизменные. Вы передаете данные в функцию, и она обычно возвращает преобразованные данные или какой-либо другой тип данных. В функциональном программировании функция никогда не должна изменять исходные данные или состояние программы.
Существует сходство с философией Unix, что каждая программа должна делать что-то хорошо. Функция не должна затрагивать различные части вашей программы. Вместо этого он должен взять свой ввод и дать вам вывод.
В идеале функции должны быть по возможности чистыми в функциональном программировании. Это означает, что при одинаковом входном сигнале выходной сигнал функции всегда будет оставаться неизменным.
Функциональное и объектно-ориентированное программирование
Это драматический отход от чего-то вроде объектно-ориентированного программирования. В объектно-ориентированном программировании у вас часто есть базовый объект с различными методами, предназначенными для изменения данных или состояния, которые являются частью этого объекта. Метод может даже изменить данные или состояние, если это не указано явно.
В практических программах иногда это имеет смысл. Тем не менее, это может усложнить поддержку программ, так как не всегда понятно, что изменяет состояние или данные. Изначально функциональное программирование использовалось в академической среде, но также может помочь предотвратить подобные проблемы.
1. JavaScript
Некоторые языки программирования допускают функциональное программирование, в то время как другие либо поощряют, либо даже применяют его. JavaScript попадает в первую категорию. Хотя вы можете использовать в языке парадигмы функционального программирования, вы также можете легко использовать объектно-ориентированный подход.
Тем не менее, существует множество парадигм функционального программирования, встроенных в JavaScript. Взять, к примеру, функции высшего порядка. Это функции, которые могут принимать другие функции в качестве аргументов.
JavaScript имеет несколько функций, которые работают с массивами, такими как карта() , уменьшения () , фильтр() и другие, все из которых являются функциями более высокого порядка. Это позволяет объединять их в цепочки, чтобы быстро выполнять различные операции с массивом.
В ранних версиях JavaScript были некоторые проблемы с изменчивостью, но в более новых версиях стандарта ECMAScript есть исправления. Вместо всеобъемлющего вар Ключевое слово для определения переменных, теперь у вас есть Const а также позволять , Первый позволяет вам определять константы, как следует из названия. Второй, позволять , ограничивает область действия переменной функцией, в которой она объявлена.
2. Питон
Как и JavaScript, Python является обобщенным языком, с которым вы можете использовать любое количество парадигм программирования. У Python могут быть свои недостатки
4 причины, почему Python не является языком программирования для вас
4 причины, почему Python не является языком программирования для вас
Язык программирования Python чрезвычайно популярен, но вот несколько причин, по которым вы можете избежать Python.
Прочитайте больше
, но функциональное программирование не является одним из них. В официальной документации по Python есть даже введение в функциональное программирование.
Для начала вы найдете много карта() , фильтр() , уменьшения () и аналогичные функции, упомянутые выше, встроены. Как и в JavaScript, это функции высшего порядка, так как они принимают другие функции в качестве аргументов. В Python функциональное программирование имеет преимущество в виде лямбда ключевое слово.
Вы можете использовать лямбда-выражения несколькими способами. Одним из способов его использования является сокращение для простых функций. При назначении переменной вы можете вызывать лямбда-выражения точно так же, как и в стандартной функции Python. Настоящее преимущество лямбда-выражений возникает, когда вы используете их в качестве анонимных функций.
В этом списке также работают анонимные функции на JavaScript и других языках. Они особенно полезны при использовании с функциями более высокого порядка, поскольку вы можете определить их на месте. Без анонимных функций вы должны были бы заранее определить даже простые добавления как специальные функции.
3. Clojure
В отличие от JavaScript и Python, Clojure не может быть нарицательным, даже среди программистов. Если вы не знакомы, Clojure — это диалект языка программирования Lisp, который датируется концом 1950-х годов. Это приносит с собой очень специфический способ делать вещи, которые оказываются идеальными для функционального программирования.
Как и другие диалекты Lisp, Clojure обрабатывает код как данные. Это означает, что код может эффективно изменить себя. В отличие от других диалектов Lisp, Clojure работает на платформе Java и компилируется в байт-код JVM. Это означает, что он может работать с библиотеками Java, независимо от того, были ли они написаны на Clojure или нет.
В отличие от предыдущих языков в этом списке, Clojure — это функциональный язык программирования с нуля. Это означает, что он защищает неизменность везде, где это возможно, особенно в структурах данных.
Clojure не ожидает, что все программы будут математически «доказуемы», но рекомендует использовать чистые функции везде, где это возможно.
4. Вяз
Elm — один из самых новых языков в этом списке. Это чисто функциональный язык, изначально разработанный Эваном Чаплицким в 2012 году. Этот язык приобрел популярность среди веб-разработчиков, особенно для создания пользовательских интерфейсов.
В отличие от каждой предыдущей записи в этом списке, Elm использует статическую проверку типов. Это помогает избежать исключений во время выполнения, поскольку вместо этого ошибки обнаруживаются во время компиляции. Это означает меньше видимых ошибок для пользователей, что является основным плюсом.
Компилятор Elm предназначен для HTML, CSS и JavaScript. Точно так же, как вы можете использовать Clojure для написания программ, работающих на Java, вы можете создавать приложения, использующие библиотеки JavaScript в Elm.
Одно из основных различий между языком вяз и другими языками здесь состоит в том, что вы не найдете общего фильтр() , карта() и аналогичные функции. Вместо этого они определяются типом данных, как List.map или же Dict.map ,
5. Хаскелл
Haskell — это другой статически типизированный, чисто функциональный язык. В отличие от Вяза, Хаскелл был здесь некоторое время. Первая версия языка была разработана в 1990 году. Последним стандартом является Haskell 2010, а следующая версия запланирована на 2020 год.
Как мы уже исследовали, чисто функциональная природа Haskell означает, что по своей природе функции не должны иметь побочных эффектов. Это делает его подходящим для решения реальных проблем, несмотря на корни функционального программирования в академических кругах.
Несмотря на то, что Haskell не пользуется популярностью среди мейнстрима, он принимал участие в некоторых широко используемых проектах. Оконный менеджер Xmonad полностью написан на Haskell. Pandoc, который конвертирует различные типы разметки в другие форматы и из них, также использует язык.
Стандарт карта() , фильтр() , уменьшения () и другие функции более высокого порядка, которые позволят вам перенести концепции из JavaScript или Python в Haskell. Если вы хотите узнать больше о языке, «Learn You a Haskell for Great Good» является популярной отправной точкой.
Вы новичок в программировании?
Некоторые из приведенных выше терминов и языков могут показаться эзотерическими, если вы еще не являетесь опытным программистом. Это хорошо, потому что знание того, чего вы не знаете, является одним из первых шагов на пути к лучшему обучению.
Некоторые из перечисленных выше языков лучше для начинающих, чем другие. Взгляните на наш список лучших языков программирования для начинающих
6 самых простых языков программирования для начинающих
6 самых простых языков программирования для начинающих
Обучение программированию — это поиск правильного языка так же, как и процесс назидания. Вот шесть самых простых языков программирования для начинающих.
Прочитайте больше
, Вы заметите, что между этими двумя списками есть некоторое пересечение.
Узнайте больше о: функциональном программировании, JavaScript, Python.
11 лучших дистрибутивов Linux для программистов
Какой функциональный язык программирования выбрать для изучения в свободное время?
Появилось немного свободного времени, которое хочу потратить на развитие своих навыков программирования. Взгляд упал на функциональные языки. Цель всего этого: выучить дополнительный язык программирования(за исключением Python’а), «раздуплить» себя, ну и непосредственно с перспективой на возможное использование в будующем (возможно какой-то будующей на работе, for fun, и т.д.). Посоветуйте, на какой лучше всего обратить внимание и почему?
В питоне есть functolls
Если интересует многопоточность — erlang
Чтобы совсем «раздуплить» — lisp
Erlang — учится быстро, легко перейти с Python, один из немногих функциональных языков, активно использующийся нынче в продакте.
Haskell — разорвет мозг на много маленьких кусочков (в хорошем смысле). Благодаря Haskell вы навсегда измените свои представления о программировании. Знания, полученные в процессе его изучения, пригодятся на протяжение всей карьеры независимо от того, на чем на самом деле будете писать.
Я об этих языках время от времени пописываю в своем бложике. Можете почитать тынц, тынц и далее по ссылкам.
Haskell, потому что вот-вот мир захватит, статей полно, есть даже рассказы уцелевших ветеранов с продакшена.