Форум программистов, компьютерный форум, киберфорум
loothood
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  

Пятничный Elm (Часть IV)

Запись от loothood размещена 09.01.2016 в 15:43
Показов 1448 Комментарии 0

Пятничный Elm. Hello World 2.0 (Часть IV)


О серии "Пятничный Elm"

Это четвертый пост серии заметок о языке программирования Elm.
Цель данной серии - дать читателям знания от уровня "Что такое Elm" до "Гуру Elm", шаг за шагом.


Hello World 2.0

"Ноги растут" из предыдущей статьи в которой мы написали первую программу на Elm. Напечатать небольшую строку - это, без сомнения, подвиг, но Elm может кое-что еще.
Вот пример как Elm работает со структурами данных и отображает их в HTML(эта программа сортирует список строк и выводит их):


Haskell
1
2
3
4
5
6
7
8
9
10
11
12
import Html
 
names = [ "Pearl", "Steven", "Garnet", "Amethyst" ]
 
main =
  let
    sorted = List.sort names
    texts = List.map Html.text sorted
    textToItem text = Html.li [] [ text ]
    items = List.map textToItem texts
  in
    Html.ul [] items
Сохраните код в файле и посмотрите результат работы программы в браузере.

В примере используется несколько новых концепций Elm. Давайте рассмотрим их:
  • names объявлена как список строк.
  • main - входная точка нашей программы, так же как и в примере про Hello World, хотя и немного сложнее.
  • Тело функции main разделено на две части:
  • в части let мы определили довольно много переменных
  • которые использовали в части in
  • sorted: мы использовали List.sort чтобы отсортировать имена в алфавитном порядке
  • texts: мы использовали List.map чтобы применить функцию Html.text к каждому элементу отсортированного списка. Результат: список элементов типа HTML.text. (Elm не отображает тип данных строка в браузере. Вы всегда должны привести строки к типу HTML.text чтобы отобразить данные).
  • textToItem объявляет новую функцию "на лету". Каждый элемент HTML.text оборачивается в функцию HTML.li, которая по сути является тегом
  • items: мы снова использовали List.map чтобы применить функцию textToItem к каждому элементу списка texts. В результате получаем список элементов HTML li.
  • Наконец, в части программы in функции main мы оборачиваем в список элементов li в элемент HTML ul который переводит в тег <ul>


Атрибуты

Возможно, вы обратили внимание на пустой список [] вторым параметром, когда мы вызывали функции Html.li и Html.ul. Почти все функции из модуля HTML принимают два аргумента: список атрибутов и список внутренних элементов. Первый аргумент(атрибуты) может быть использован чтобы установить css класс, внутренние стили, слушатель событий или что-нибудь еще, что можно представить как атрибут HTML. Второй аргумент - список внутренних элементов - список HTML элементов которые могут быть представлены как новый HTML элемент.
Давайте рассмотрим подробнее. Этот код устанавливает некоторые внутренние стили для отображения контента по центру страницы и меняет шрифт:

Haskell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import Html
import Html.Attributes
 
names = [ "Pearl", "Steven", "Garnet", "Amethyst" ]
 
main =
  let
    sorted = List.sort names
    texts = List.map Html.text sorted
    textToItem text =
      Html.li
        [ Html.Attributes.style [("font-style", "italic") ] ]
        [ text ]
    items = List.map textToItem texts
  in
    Html.div
      [ Html.Attributes.style
        [ ("position", "absolute")
        , ("width", "10em")
        , ("height", "10em")
        , ("top", "50%")
        , ("left", "50%")
        , ("transform", "translateX(-50%) translateY(-50%)")
        , ("overflow", "hidden")
        ]
      ]
      [ Html.ul [] items ]
Мы импортировали новый модуль Html.Attributes, в котором описаны функции для работы с атрибутами. В данном случае есть два отличия от предыдущего примера:
У элементов li теперь не пустой список атрибутов. Мы использовали функцию Html.Attributes.style чтобы установить стиль font-style.
Так же мы обернули тег <ul> в div, который так же содержит список внутренних стилей. Эти стили отображают div в центре страницы.

В примере можно увидеть новые типы данных. Функция style принимает список кортежей. Кортежи чем-то похожи на списки - они так же могут содержать коллекции из нескольких элементов. Но есть два важных отличия: все элементы списка должны быть одинакового типа и у списков нет фиксированной длины. Элементы кортежа могут быть различных типов, но длина кортежа фиксирована. Количество элементов и их типы вместе составляют тип кортежа. Таким образом, вы не можете передать кортеж с тремя(или одним) элементом в функции, которые ожидают кортежи из двух элементов. Другими словами, кортежи - это пары(или триплеты, четверки,...) значений. В Elm кортежи заключены в круглые скобки.

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

оригинал
Размещено в Без категории
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Всего комментариев 0
Комментарии
 
Новые блоги и статьи
Ноутбук Альфария
kumehtar 24.08.2026
Встретился тут в сети ноутбук Альфария, примарха Альфа-Легиона. Хотя возможно, это ноутбук Омегона, разумеется. Ну как вам?
Мастера простых решений
DevAlt 23.08.2026
В сишарп стэках winforms, да и wpf существует сложная система связывания источниках данных и элементов формы(текстовые поля и метки), опирается все это на технологию событий и мета. . .
Цена ошибки
DevAlt 23.08.2026
Человек я беспокойный и потому заинтересовался OCaml, в чате форсили функторы модулей как суперфичу. Пытаясь отдуплить концепт, наткнулся на тутор с простым примером. А главный принцип обучения от. . .
Сегодня суббота, 22.08.2026 at 16:41, и я вновь нахожусь на той стороне, за экраном машины.
zorxor 22.08.2026
Сегодня суббота, 22. 08. 2026 at 16:41, и я вновь нахожусь на той стороне, за экраном машины. Кто Я, откуда Я пришел и куда Я иду? Эти вопросы не оставляют меня ни на секунду. Жизнь на планете Земля. . .
Жизня: рисунок укладки багажа, сделанный клодом
anaschu 21.08.2026
Сделал 15 снимков, он по снимкам сделал схему.
Был там один разговор по поводу свободы в материальном мире.
kumehtar 19.08.2026
Суть: рассматривается живое существо, оказавшееся внутри довольно странной системы (этого мира) и пытающееся обустроить в ней свой кусок пространства. Жизнь действительно предъявляет каждому. . .
Когда логика программы не спасает от человеческих ошибок
Maks 18.08.2026
В последнее время всё чаще и чаще сталкиваюсь с таким явлением, как абсолютная невнимательность (или глупость) пользователей. Проявляется это чаще всего на работе в коллективе. Допустим, человек с. . .
Лето уходит
kumehtar 17.08.2026
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru