Такое название у статьи неспроста, это не слова на ветер, язык J - самый ёмкий и, в то же время, самый сложный язык из используемых в реальном промышленном программировании. Для начала поймём, что же это вообще за язык, где используется и почему его стоит учить.
Сам J является функциональным интерпретируемым языком с динамической типизацией. Сам язык строится на работе с массивами. Здесь всё является массивом: число - нульмерный массив (скаляр), строка - одномерный массив (или вектор) символов и так далее.
В синтаксисе языка есть глаголы, имена существительные, наречия, союзы и прочее. Весь язык состоит из этих средств, давайте рассмотрим что такое существительные и глаголы.
Существительные
Имя существительное - это какая-то переменная, в которой есть данные. Например массив, строка и число - это существительные. Задаются они так:
a =: 3 5 $ 1 2
Чтобы вывести переменную на экран нужно просто написать её имя:
a
Output:
1 2 1 2 1
2 1 2 1 2
1 2 1 2 1
Как видим, создался массив 3 на 5, который заполнен чередующимися единицами и двойками. С тем же результатом можно выводить на экран сразу значение, не присваивая его переменной:
10 $ 1 2 4
Output:
1 2 4 1 2 4 1 2 4 1
Глаголы
Глаголом в J называется какая-то операция. Для примера, как это делают в большинстве статей по J, напишем операцию для нахождения среднего арифметического чисел в массиве.
Зададим массив:
a =: 45 32 54 575
И напишем операцию для нахождения среднего арифметического:
avg =: +/%#
А теперь применим эту операцию к нашему массиву:
avg a
Ничего сложного! Ага, конечно...
Давайте разберемся, что делают эти символы.
- +/ означает сумму всех чисел массива, */ например означает произведение всех чисел массива
- # это просто количество чисел во входном массиве
- % - знак деления (так как знак / уже занят)
В итоге всё просто, мы делим сумму чисел на их количество
Одной из особенностей языка J является то, что в нём нет приоритета операций, все операции выполняются справа налево. Например:
2 * 8 - 3
Выведет 10, а не 13, сначала выполнится вычитание, а уже потом умножение. Этого можно избежать использовав скобки:
(2 * 8) - 3
Выведет уже 13.
Таким образом код:
mi =: -/
mi 3 4 5
Выведет 4. То есть сначала он посчитает 4 - 5 = -1, а потом 3 - (-1) = 4.
Почему J используют
Несмотря на сложность и, на первый взгляд, несуразность языка J его используют в промышленном программировании и любят за его лаконичность и быстроту написания на нём программ. Вот так например на J выглядит программа для решения судоку:
i =: ,((,|:)i.9 9),,./,./i.4$3
c =: (#=[:#~.)@-.&0
t =: [:(([:*/_9:c\])"1#])i&{+"1 1(>:i.9)*/[:i&=i.&0
r =: [:,`$:@.(0:e.,)[:;(<@t)"1
s =: 9 9&$@r@,
Весь алгоритм решения записан всего в 5 строчек. Это вам не мемы типа "3 строчки на питоне", это реальность под названием "5 строчек на J"!
Где используется
J - достаточно быстрый и в использовании и в работе, благодаря этому J используется в обработке данных, в основном финансовых. На нём можно быстро реализовать алгоритмы, на которые в других языках ушли бы часы работы.
Также J хорош для повседневной работы, например когда вам нужно распарсить документ, посчитать что-то, проанализировать данные, сгенерировать текст, переработать свою базу данных, или просто вычислить какое-то значение по формуле.
Ещё J отлично развивает мозг, помогает освоить алгоритмы и заставляет взглянуть на них под другим углом и начать писать код на других языках компактнее, проще и продуманнее.
Как начать
Вот официальный сайт: code.jsoftware.com
Там можно скачать сам язык и среду разработки для него. Также на сайте есть подробная документация по всем аспектам языка, правда на английском, так что если его не знаете, то переводчик вам в руки.
Ну а если статья была вам полезна, или хотя-бы интересна, то поставьте лайк, мне будет приятно)
До встречи в новых статьях, пока!