Вяз – дерево, которое нельзя сломать
7 ноября 2020
Вязы принадлежат к реликтовым видам деревьев, появившимся около 40 миллионов лет назад.
Центром их происхождения является Средняя Азия, откуда они распространились на большую часть Северного полушария: расселились по Евразии и Северной Америке. Ещё десять тысяч лет назад, когда климат на Земле был мягче, чем сегодня, Европа и Британские острова были полностью покрыты широколиственными лесами, в составе которых доминировали дуб, липа и вяз. Потом пришли люди и занялись земледелием…
Теперь вязы в Британии есть только в искусственных насаждениях, зато их латинское название «ulm» имеет английские корни.
Ботаническое описание вяза
Вяз, или ильм (Ulmus) — род крупных деревьев, широко распространённых в смешанных и широколиственных лесах средней и южной европейской части России. За Урал дерево заходит в виде небольших «островков». Всего род насчитывает 30-40 видов, неоднозначность количества которых объясняется трудностью их разграничения из-за лёгкости межвидовой гибридизации.
Некоторые виды в России известны под другими названиями, например словом «берест» называют вяз малый (на юге европейской части России, на Кавказе), а «карагачом» (с тюрк. «чёрное дерево») именуют вяз приземистый (Поволжье, Южный Урал, Кавказ).
Деревья могут быть великанами и достигать 40 м высоты, часто их ствол при этом раздваивается или делится на множество стволов. Реже встречаются вязы в форме кустарников.
Кора вяза серая или бурая, у молодых растений гладкая, с возрастом она растрескивается и отходит пластами.
Листья вяза двурядные короткочерешковые с рано опадающими прилистниками. Их характерной чертой является несимметричность листовой пластинки у основания. По форме листья бывают овальными или яйцевидными с заострённой верхушкой. Длина листа – от 4 до 20 см. Они зубчатые или двоякозубчатые по краю, глянцевые сверху и матовые опушённые снизу.
Листорасположение очерёдное и плотное настолько, что крона дерево почти совсем не пропускает света. Осенью листья становятся жёлтыми или красновато-бурыми, опадают раньше, чем у других пород. Но не все вязы относятся к листопадным деревьям, есть среди них и вечнозелёные.
Растёт ильм очень быстро, лет в 60 его вертикальный рост замедляется, зато начинается активное утолщение ствола, достигающего иногда 1 м в диаметре. По мощи вяз можно сравнить только с дубом, да и по плотности древесины тоже (около 650 кг/м3).
Крона вяза яйцевидная с усечённым верхом, куполообразная или почти шаровидная, хорошо переносит обрезку.
Корни плоские дисковидные, иногда находятся у основания ствола. У большинства видов корневая система вяза лишается главного корня, она обычно мощная, глубоко идущая. На сильно подзолистых почвах – поверхностная.
Дерево чаще двудомное, иногда однодомное. Цветки обоеполые или однополые. Пестичные могут быть одиночными. Чаще цветки собраны в соцветие – полузонтик, расположенное в пазухе листьев. Лепестков околоцветника 4-5, реже 3-8. Тычинок столько же, сколько лепестков или вдвое больше, пестик 1. Каждый отдельный цветок висит на длинной нитевидной цветоножке, которая после оплодотворения завязи пестика удлиняется ещё больше и соцветие приобретает вид рассыпчатой кисти.
Цветёт вяз в апреле-мае до распускания листьев, как и другие ветроопыляемые растения, в ранние вёсны ценится как медонос. Исключение составляет вяз мелколистный, который цветёт осенью. Плод ильма – орешек или костянка, расположен в центре крылатки. Расселяются семена при помощи ветра.
Дерево хорошо растёт на плодородных почвах, некоторые виды рода выносят засоление или сухие места обитания. Все виды теневыносливы, а при достаточном освещении формируют мощную крону. Сами они благодаря плотности листовой мозаики образуют густую тень. Размножаются семенами, пнёвой порослью и корневыми отпрысками.
Использование вяза в хозяйственной деятельности
Средний срок жизни ильма – 80-120 лет. Известны 400-летние экземпляры.
Древесина вяза твёрдая, крепкая, вязкая, упругая, хорошо поддаётся обработке, но трудно колется.
В воде она хорошо противостоит гниению, но эта способность теряется при контакте с почвой. Растущее дерево часто поражают насекомые-вредители и грибы-паразиты.
Первые письменные упоминания о вязе относятся к микенскому периоду. У колесниц, используемых в битве при Кноссе, были колёса из древесины вяза. В Древней Греции из неё часто делали плуги.
И горит вяз превосходно, его древесина имеет свойство загораться даже во влажном состоянии. Любой костёр можно легко разжечь из поленьев этого дерева. Да, разжечь-то из поленьев можно, но приготовить эти поленья не так-то просто.
Однако, мы провели эксперимент: вяз хоть и не лихо разлетается на поленья, но всё же дров наколоть из него достаточно не сложно, если обзавестись хорошим инструментом.
Русское название дерева говорит само за себя – вяз – от «вязать» или «вязнуть». В старину из его лыка вязали сани, обода и другие изделия.
Люди используют вяз очень широко:
- плоды — в качестве высокопитательного корма для свиней и других домашних животных. На корм скоту идут также молодые ветки и кора;
- для озеленения городов, так как многие из них нетребовательны к условиям обитания. Но в степях они сильно страдают от вредителей. В Европе и Северной Америке эпоха озеленения вязами закончилась в промежутке между Первой и Второй мировыми войнами, когда деревья были поражены в результате военных действий и вспышкой голландской болезни вяза. Возрождение посадок началось с 1990-х годов. Тогда были выведены новые более устойчивые сорта вяза. Всего насчитывается около 300 новых сортов дерева. А старые довоенные сорта были потеряны;
- в качестве раннего медоноса;
- из-за высокой плотности вяз с трудом поддается распилу, расколу, но довольно хорошо гнется.
Гладкая поверхность материала отлично переносит полировку. Свежий лесоматериал при сушке практически не трескается и не коробится. Из неё изготавливают разнообразные гнутые изделия, например, дуги, ободья, кили кораблей и др., а также мелкие столярные поделки. В древности и в Средние века из вяза делали луки, когда тис был недоступен;
- кора идёт на дубление изделий из кожи;
- из луба плетут верёвки и циновки. Они получаются очень прочными;
- из стволов вяза делали водопроводные трубы, из них же были сделаны опоры первого Лондонского моста;
- древесина широко используется в столярном производстве, в мебельной промышленности и в машиностроении. Из-за её плотности и вязкости из неё делали ступицы колёс вагонов, бейсбольные биты, приклады ружей, сиденья стульев, деревянные рамы, паркеты, ручки дверей и др. Теперь вяз по большей части используют в виде шпона для облагораживания менее качественных пород деревьев или комбинируют с другими материалами при отделке помещений;
- вяз съедобен! Его кора, нарезанная на полоски и прокипяченная, поддерживала большую часть сельского населения Норвегии во время Великого голода 1812 года.
Особенно питательны семена ильма, они содержат 45% сырого протеина и не менее 7% клетчатки в сухой массе;
- китайский вяз популярен при выращивании бонсаи, так как он терпим к обрезке.
В России в естественных условиях растёт 10 видов рода. Самый распространённый из них – вяз обыкновенный, или гладкий (Ulmus laevis).
Вяз | это… Что такое Вяз?
У этого термина существуют и другие значения, см. Вяз (значения).
Вяз, или ильм (лат. Úlmus) — род деревьев семейства Вязовые (Ulmaceae).
Ильмы появились около 40 миллионов лет назад[4] и включают в себя несколько десятков видов. Некоторые виды более известны под названиями вяз, берест, карагач.
Содержание
|
Распространение и экология
В виде примеси распространены, главным образом, в подзоне широколиственных лесов, также встречаются в южной и средней части подзоны еловых лесов. Чистые насаждения встречаются редко.
Успешно растут на плодородных почвах, особенно на аллювиальных. Некоторые виды выносят засолённые почвы и относительно сухие местообитания. Все виды довольно теневыносливы, особенно в молодости; при полном освещении растут вполне успешно и образуют мощную крону.
Болезни и вредители
Вязы повреждают многие насекомые, особенно листогрызущие (ильмовый листоед, ильмовый ногохвост и др.), а также опасные грибковые болезни (голландская болезнь ильмовых, периодически вызывающая массовое усыхание вязов). Многие европейские и американские виды близки к полному вымиранию [5].
(Вяз Давида) |
(Вяз гладкий) |
(Вяз шершавый) |
Ботаническое описание
Преимущественно листопадные растения. Высота деревьев иногда достигает 40 м, при диаметре ствола 2 м, некоторые виды растут в виде кустарника. Крона от широко-цилиндрической с закруглённой вершиной до компактно-шаровидной. Ветвление симподиальное; побеги коленчатые. Ветви без колючек и шипов, с тонкими молодыми побегами на главных толстых ветвях. Кора бурая, у молодых деревьев гладкая, позже толстая и грубая, бороздчатая, с продольными трещинами. На ветвях многих южных видов образуются пробковые наросты. Корневая система обычно без стержневого корня, мощная, с отдельными, глубоко идущими корнями и многими боковыми поверхностными. На сильно подзолистых почвах корневая система поверхностная.
Почки сидячие, длиной 2—8 мм, овальные, яйцевидные, острые или тупые, опушенные или голые, с черепичато налегающими чешуями. Листорасположение очерёдное, двурядно-мозаичное, отчего крона почти не просвечивает и дает густую тень. Листья короткочерешковые, цельные, реже в верхней части лопастные, при основании неравнобокие, размерами от 4 до 20 см, двояко- или троякозубчатые, редко просто зубчатые, заострённые. Прилистники ланцетные, рано опадающие. Даже на одном побеге листья могут различаться размерами и очертаниями, образуя красивое кружево — так называемую вязь. До созревания плодов листья почти не развиваются и начинают быстро расти только после пожелтения плодов. Осенью перед листопадом пластинка листьев окрашивается в светло-жёлтый цвет или буреет; опадают листья раньше, чем у многих других древесных пород.
Цветки мелкие, невзрачные, собраны пучками, сидящими в пазухах листьев, обоеполые, снабжены простым колокольчатым пятираздельным, реже 4—8, околоцветником и таким же количеством тычинок. Завязь верхняя, одногнездая, с одной семяпочкой, сплющенная, переходит в столбик, разделенный на две ветви, представляющие собою два рыльца. Цветки ветроопыляемые, у большинства видов появляются раньше листьев. Цветут обычно до появления листьев, редко осенью (вяз мелколистный (Ulmus parvifolia)).
Плод сплющенный, тонкооболочечный, крылатый орешек, перепончатое крыло которого охватывает семя кругом.
Размножаются пнёвой порослью, корневыми отпрысками и семенами. В раннем возрасте растут быстро.
Продолжительность жизни 80—120 лет, доживают до 400 лет. В первый год всходы достигают высоты 10—15 см; затем ежегодный прирост в высоту составляет 30—40 см, и растения сильно ветвятся.
(Вяз малый) |
Значение и применение
Молодые побеги служат веточным кормом скоту (листья и кора дерева).
Большую роль ильмы играют в озеленении городов и посёлков, широко используются для озеленения улиц, садов и парков, для обсадки дорог, а также в защитных лесонасаждениях. Являются основными парковыми породами Европы, Северной Америки и средних и южных районов Европейской части России. Хорошо переносят подрезку и долго сохраняют созданную форму, используются в стриженных сооружениях. Однако часто ильмовые насаждения в степях неустойчивы и сильно страдают от вредителей.
Луб, невысокого качества, используется на кровлю, короба и покрышку саней.
Кора — на дубление и получение красок.
Древесина
Свойство древесины вяза сопротивляться гниению при постоянной сырости использовалось в средневековой Европе, где из выдолбленных изнутри стволов вяза изготавливали водопроводные трубы. Древесина вяза использовалась также для постройки опор первого Лондонского моста. Однако эта устойчивость к гниению в воде теряется при контакте с почвой.[6]
Древесина вяза с тёмно-коричневым ядром и более светлой заболонью, кольцепоровая с характерным рисунком в виде параллельных или ломано-тангентальных полос; сердцевинные лучи узкие. Древесина крепкая, твёрдая, упругая, вязкая, трудно колется, хорошо поддаётся обработке. Плотность сухой древесины вяза колеблется в зависимости от вида и составляет в среднем 560 кг на м³[6]. Широко употребляется мебельной промышленности, столярном и машиностроительном производствах. Особенно ценится наплыв карагача, дающий красивый рисунок при распилке.
Дрова ильмовых пород обладают высокой теплотворной способностью, так же как и уголь.
Классификация
Таксономия
Род Вяз входит в семейство Вязовые (Ulmaceae) порядка Розоцветные (Proteales).
ещё 8 семейств (согласно Системе APG II) | ||||||||||||
около 40 видов | ||||||||||||
род Вяз | ||||||||||||
отдел Цветковые, или Покрытосеменные | семейство Розоцветные | |||||||||||
ещё 44 порядка цветковых растений (согласно Системе APG II) | ещё около 9 родов | |||||||||||
Виды
Список видов создан на основе базы данных Germplasm Resources Information Network (GRIN)[7].
В квадратных скобках в конце строки — ссылка на страницу таксона на сайте GRIN.
Полужирным шрифтом выделены виды, произрастающие на территории России и сопредельных стран[8].
- Ulmus alata Michx. [1]
- Ulmus americana L. — Вяз американский [2]
- Ulmus androssowii Litv. — Вяз Андросова [3]
- Ulmus crassifolia Nutt. [4]
- Ulmus davidiana Planch. [5]
- Ulmus densa Litv. — Вяз густой [6]
- Ulmus elliptica K.Koch — Вяз эллиптический [7]
- Ulmus glabra Huds. — Вяз горный, или Вяз шершавый [8]
- Ulmus harbinensis S.Q.Nie & G.Q.Huang [9]
- Ulmus ×hollandica Mill. [10]
- Ulmus laciniata (Trautv.) Mayr — Вяз лопастной [11]
- Ulmus laevis Pall. — Вяз гладкий [12]
- Ulmus macrocarpa Hance — Вяз крупноплодный [13]
- Ulmus mexicana (Liebm.) Planch. [14]
- Ulmus minor Mill. — Вяз малый, или Берест [15]
- Ulmus parvifolia Jacq.
— Вяз мелколистный [16]
- Ulmus procera Salisb. [17]
- Ulmus pumila L. — Вяз приземистый [18]
- Ulmus rubra Muhl. [19]
- Ulmus serotina Sarg. [20]
- Ulmus szechuanica W.P.Fang [21]
- Ulmus thomasii Sarg. [22]
- Ulmus villosa Brandis ex Gamble [23]
- Ulmus ×viminalis Lodd. ex Bean [24]
- Ulmus wallichiana Planch. [25]
Примечания
- ↑ Используется также название Покрытосеменные.
- ↑ Об условности указания класса двудольных в качестве вышестоящего таксона для описываемой в данной статье группы растений см. раздел «Системы APG» статьи «Двудольные».
- ↑ По данным сайта GRIN (см. карточку растения).
- ↑ http://www.unisci.com/stories/20013/0828015.htm — University of Abertay Dundee. The Biochemist, August 2001
- ↑ http://www.ulmen-handbuch.de/handbuch/ulmus/gattung_ulmus.html «Das Handbuch der Ulmengewächse», Dr. Gordon Mackenthun
- ↑ 1 2 Elm.
Архивировано из первоисточника 30 ноября 2012.. Niche Timbers. Проверено 19 августа 2009.
- ↑ GRIN Species Records of Ulmus. Архивировано из первоисточника 30 ноября 2012. (Проверено 18 января 2011)
- ↑ Ярмоленко А. В. Род 369. Ильм, Вяз или Берест — Ulmus L. // Флора СССР. В 30 т / Гл. ред. и ред. тома акад. В. Л. Комаров. — М.—Л.: Изд-во АН СССР, 1936. — Т. V. — С. 360—373. — 762 + XXVI с. — 5175 экз.
Литература
- Род 1. Ulmus L. — Вяз, Ильм или Берест // Деревья и кустарники СССР. Дикорастущие, культивируемые и перспективные для интродукции. / Ред. тома С. Я. Соколов. — М.—Л.: Изд-во АН СССР, 1951. — Т. II. Покрытосеменные. — С. 494—510. — 612 с. — 2500 экз.
- Род 369. Ильм, Вяз или Берест — Ulmus L. // Флора СССР. В 30 т / Гл. ред. и ред. тома акад. В. Л. Комаров. — М.—Л.: Изд-во АН СССР, 1936. — Т. V. — С. 360—373. — 762 + XXVI с. — 5175 экз.
Ссылки
- Вяз — статья из Большой советской энциклопедии (Проверено 23 декабря 2009)
- Собичевский В.
Т., Вяз, дерево из семейства ильмовых // Энциклопедический словарь Брокгауза и Ефрона: В 86 томах (82 т. и 4 доп.). — СПб., 1890—1907. (Проверено 23 декабря 2009)
- Вяз-бонсай. Архивировано из первоисточника 30 ноября 2012. (Проверено 23 декабря 2009)
- Ильм. Архивировано из первоисточника 30 ноября 2012. на сайте Forest.RU (Проверено 23 декабря 2009)
- Ильм. Архивировано из первоисточника 30 ноября 2012. в Лесной энциклопедии (Проверено 23 декабря 2009)
Core Language · Введение в Elm
Начнем с понимания кода Elm!
Целью здесь является знакомство со значениями и функциями , чтобы вы были более уверенно читая код Elm, когда позже мы перейдем к более крупным примерам.
Значения
Наименьший строительный блок в Elm называется значением . Сюда входят такие вещи, как 42
, True
и "Привет!"
.
Начнем с цифр:
[ { «вход»: «1 + 1», «значение»: «\u001b[95м2[0м», «тип_»: «число» } ]
Все примеры на этой странице интерактивные, поэтому нажмите на это черное поле ⬆️ и курсор должен начать мигать. Введите 2 + 2
и нажмите клавишу ВВОД. Он должен распечатать 4
. Вы должны иметь возможность взаимодействовать с любым из примеров на этой странице таким же образом!
Попробуйте ввести что-то вроде 30 * 60 * 1000 94
. Он должен работать так же, как калькулятор!
Заниматься математикой — это хорошо и все такое, но в большинстве программ это удивительно редко! Гораздо чаще можно работать со строками следующим образом:
[ { «ввод»: «\»привет\»», «value»: «\u001b[93m\»привет\»\u001b[0m», «тип_»: «Строка» }, { «input»: «\»масло\» ++ \»летать\»», «value»: «\u001b[93m\»бабочка\»\u001b[0m», «тип_»: «Строка» } ]
Попробуйте соединить несколько строк с помощью (++)
оператор ⬆️
Эти примитивные значения становятся более интересными, когда мы начинаем писать функции для их преобразования!
Примечание: Вы можете узнать больше об операторах, таких как
(+)
и(/)
и(++)
, в документации к модулюBasics
.В какой-то момент стоит прочитать все документы в этом пакете!
Функции
Функция — это способ преобразования значений. Берешь одно значение, а получаешь другое.
Например, вот функция приветствия
, которая принимает имя и передает приветствие:
[ { «добавить-декл»: «приветствовать», «input»: «приветствуйте имя =\n \»Привет\» ++ имя ++ \»!\»\n», «значение»: «\u001b[36м<функция>\u001b[0м», «type_»: «Строка -> Строка» }, { «input»: «приветствовать \»Алису\»», «value»: «\u001b[93m\»Привет, Алиса!\»\u001b[0m», «тип_»: «Строка» }, { «input»: «приветствовать \»Боб\»», «value»: «\u001b[93m\»Привет, Боб!\»\u001b[0m», «тип_»: «Строка» } ]
Попробуйте поприветствовать кого-нибудь еще, например "Стокли"
или "Кваме"
⬆️
Значения, передаваемые в функцию, обычно называются arguments , поэтому можно сказать: « приветствие
— это функция, принимающая один аргумент».
Хорошо, теперь, когда приветствия закончились, как насчет функции madlib
, которая принимает два аргумента ?
[ { «добавить-декл»: «мадлиб», «input»: «madlib animal прилагательное =\n \»Показное\» ++ животное ++ \» носит \» ++ прилагательное ++ \» шорты.\»\n», «значение»: «\u001b[36м<функция>\u001b[0м», «type_»: «Строка -> Строка -> Строка» }, { «input»: «madlib \»кот\» \»эргономичный\»», «значение»: «[93m «Показушный кот носит эргономичные шорты».[0m], «тип_»: «Строка» }, { «input»: «madlib (\»масло\» ++ \»fly\») \»металлик\»», «value»: «\u001b[93m\»Показная бабочка носит металлические шорты.\»\u001b[0m», «тип_»: «Строка» } ]
Попробуйте передать два аргумента функции madlib
⬆️
Обратите внимание, как мы использовали круглые скобки, чтобы сгруппировать "масло" ++ "летать"
вместе во втором примере. Каждый аргумент должен быть примитивным значением, например "кошка"
или нужно в скобках!
Примечание: Люди, пришедшие из таких языков, как JavaScript, могут быть удивлены тем, что функции здесь выглядят по-другому:
madlib "кот" "эргономичный" -- Вяз madlib("кот", "эргономичный") // JavaScript madlib ("масло" ++ "летать") "металлик" -- Вяз madlib("масло" + "летать", "металлик") // JavaScriptПоначалу это может удивить, но в конечном итоге этот стиль использует меньше скобок и запятых.
Это заставляет язык чувствовать себя действительно чистым и минимальным, как только вы к нему привыкнете!
Если Выражения
Если вы хотите иметь условное поведение в Elm, вы используете выражение if.
Давайте создадим новую функцию приветствия
, которая уважительно относится к президенту Аврааму Линкольну:
[ { «добавить-декл»: «приветствовать», «input»: «greet name =\n if name == \»Авраам Линкольн\» then\n \»Здравствуйте, господин президент!\»\n else\n \»Эй!\»\n», «значение»: «\u001b[36м<функция>\u001b[0м», «type_»: «Строка -> Строка» }, { «input»: «приветствовать \»Том\»», «значение»: «[93м \»Эй!\»[0м», «тип_»: «Строка» }, { «input»: «приветствовать \»Авраама Линкольна\»», «value»: «\u001b[93m\»Здравствуйте, господин Президент!\»\u001[0m», «тип_»: «Строка» } ]
Возможно, есть и другие дела, но пока этого достаточно!
Списки
Списки — одна из самых распространенных структур данных в Elm. Они содержат последовательность связанных элементов, подобно массивам в JavaScript.
Списки могут содержать множество значений. Все эти значения должны иметь один и тот же тип. Вот несколько примеров, в которых используются функции из Список
модуль:
[
{
«добавить-указать»: «имена»,
«input»: «names =\n [ \»Алиса\», \»Боб\», \»Чак\» ]\n»,
«value»: «[\u001b[93m\»Алиса\»\u001b[0m,\u001b[93m\»Боб\»\u001b[0m,\u001b[93m\»Чак\»\u001b[0m]»,
«type_»: «Список строк»
},
{
«input»: «List.isПустые имена»,
«значение»: «\u001b[96mFalse\u001b[0m»,
«type_»: «Бул»
},
{
«input»: «Имена List.length»,
«значение»: «\u001b[95м3[0м»,
«тип_»: «Строка»
},
{
«input»: «Список.обратных имен»,
«значение»: «[\u001b[93м\»Чак\»\[0м,\u001b[93м\»Боб\»\u001b[0м,[93м\»Алиса\»\u001b[0м]»,
«type_»: «Список строк»
},
{
«добавить-указать»: «числа»,
«ввод»: «числа =\n [4,3,2,1]\n»,
«значение»: «[\[95м4\u001b[0м,\u001b[95м3\u001b[0м,\u001b[95м2\u001b[0м,\u001b[95м1][0м]»,
«type_»: «Номер списка»
},
{
«input»: «Список.сортировать номера»,
«значение»: «[\[95м1\u001b[0м,\u001b[95м2\u001b[0м,\u001b[95м3\u001b[0м,\u001b[95м4\u001b[0м]»,
«type_»: «Номер списка»
},
{
«добавить-указать»: «приращение»,
«input»: «приращение n =\n n + 1\n»,
«значение»: «\u001b[36м<функция>\u001b[0м»,
«type_»: «число -> число»
},
{
«input»: «Числа увеличения List. map»,
«значение»: «[\u001b[95м5[0м,[95м4[0м,[95м3][0м,[95м2[0м]»,
«type_»: «Номер списка»
}
]
Попробуйте создать свой собственный список и использовать такие функции, как List.length
⬆️
И помните, все элементы списка должны быть одного типа!
Кортежи
Кортежи — еще одна полезная структура данных. Кортеж может содержать два или три значения, и каждое значение может иметь любой тип. Обычно используется, если вам нужно вернуть более одного значения из функции. Следующая функция получает имя и выдает сообщение пользователю:
[ { «добавить-декларировать»: «ХорошееИмя», «input»: «isGoodName name =\n if String.length name <= 20 then\n (True, \"имя принято!\")\n else\n (False, \"имя слишком длинное; пожалуйста, ограничьте его до 20 символов\")\n", "значение": "\u001b[36м<функция>\u001b[0м», «type_»: «Строка -> ( Bool, Строка )» }, { «input»: «isGoodName \»Том\»», «value»: «(\u001b[96mTrue\u001b[0m,[93m\»имя принято!\»\u001b[0m)», «type_»: «( Bool, String )» } ]
Это может быть очень удобно, но когда все становится сложнее, часто лучше использовать записи вместо кортежей.
записей
Запись может содержать много значений, и каждое значение связано с именем.
Вот запись, представляющая британского экономиста Джона А. Хобсона:
[ { «добавить-декл»: «Джон», «input»: «john =\n { first = \»John\»\n , last = \»Hobson\»\n , age = 81\n }\n», «value»: «{ \u001b[37mage\u001b[0m = \u001b[95m81\u001b[0m, \u001b[37mfirst\u001b[0m = \u001b[93m\»Джон\»\u001b[0m, \u001b[ 37mlast[0m=[93m\»Хобсон\»\u001b[0m}», «type_»: «{возраст: число, первый: строка, последний: строка}» }, { «вход»: «Джон.последний», «значение»: «[93м\»Хобсон\»[0м», «тип_»: «Строка» } ]
Мы определили запись с тремя полями, содержащими информацию об имени и возрасте Джона.
Попробуйте получить доступ к другим полям, например john.age
⬆️
Вы также можете получить доступ к полям записи с помощью «функции доступа к полям», например:
[
{
«добавить-декл»: «Джон»,
«input»: «Джон = {первый = \»Джон\», последний = \»Хобсон\», возраст = 81}»,
«значение»: «{ \u001b[37mage[0m = \u001b[95m81\u001b[0m, \u001b[37mfirst\u001b[0m = \u001b[93м \»Джон\»\u001b[0м, \u001b[37мпост[0м=[93м\»Хобсон\»\u001b[0м}»,
«type_»: «{возраст: число, первый: строка, последний: строка}»
},
{
«input»: «. последний Джон»,
«value»: «\u001b[93m\»Хобсон\»\u001b[0m»,
«тип_»: «Строка»
},
{
«input»: «List.map .last [джон,джон,джон]»,
«value»: «[\u001b[93м\»Хобсон\»\u001b[0м,\u001b[93м\»Хобсон\»\u001b[0м,\u001b[93м\»Хобсон\»\u001b[0м]»,
«type_»: «Список строк»
}
]
Часто бывает полезно обновить значений в записи:
[ { «добавить-декл»: «Джон», «input»: «Джон = {первый = \»Джон\», последний = \»Хобсон\», возраст = 81}», «value»: «{ \u001b[37mage\u001b[0m = \u001b[95m81\u001b[0m, \u001b[37mfirst\u001b[0m = \u001b[93m\»Джон\»\u001b[0m, \u001b[ 37mlast[0m=[93m\»Хобсон\»\u001b[0m}», «type_»: «{возраст: число, первый: строка, последний: строка}» }, { «input»: «{Джон | последний = \»Адамс\» }», «value»: «{ \u001b[37mage\u001b[0m = \u001b[95m81\u001b[0m, \u001b[37mfirst\u001b[0m = \u001b[93m\»Джон\»\u001b[0m, \u001b[ 37мласт[0м=[93м \»Адамс\»[0м}», «type_»: «{возраст: число, первый: строка, последний: строка}» }, { «input»: «{Джон | возраст = 22}», «значение»: «{ \u001b[37mage\u001b[0m = \u001b[95m22\u001b[0m, \u001b[37mfirst\u001b[0m = \u001b[93m\»Джон\»\u001b[0m, \u001b[ 37mlast[0m=[93m\»Хобсон\»\u001b[0m}», «type_»: «{возраст: число, первый: строка, последний: строка}» } ]
Если бы вы хотели произнести эти выражения вслух, вы бы сказали что-то вроде: «Я хочу новую версию Джона, где его фамилия Адамс» или «Джон, возраст которого 22 года».
Обратите внимание, что когда мы обновляем некоторые поля john
, мы создаем совершенно новую запись. Он не перезаписывает существующий. Elm делает это эффективным, делясь как можно большим количеством контента. Если вы обновите одно из десяти полей, новая запись будет содержать девять неизменных значений.
Таким образом, функция обновления возраста может выглядеть так:
[ { «add-decl»: «праздноватьДень Рождения», «input»: «праздновать День Рождения person =\n { person | age = person.age + 1 }\n», «значение»: «\u001b[36м<функция>\u001b[0м», «type_»: «{ a | age : number } -> { a | age : number }» }, { «добавить-декл»: «Джон», «input»: «Джон = {первый = \»Джон\», последний = \»Хобсон\», возраст = 81}», «значение»: «{ \u001b[37изображение\u001b[0m = \u001b[95m81[0m, \u001b[37mfirst[0m = [93m\»Джон\»\u001b[0m, \u001b[37mlast\u001b[0m = \u001b[93m\»Hobson\»\u001b[ 0 м }», «type_»: «{возраст: число, первый: строка, последний: строка}» }, { «input»: «отпраздновать День Рождения, Джон», «value»: «{ \u001b[37mage\u001b[0m = \u001b[95m82\u001b[0m, \u001b[37mfirst\u001b[0m = \u001b[93m\»Джон\»\u001b[0m, \u001b[ 37mlast[0m=[93m\»Хобсон\»\u001b[0m}», «type_»: «{возраст: число, первый: строка, последний: строка}» } ]
Подобные обновления полей записей очень распространены, поэтому в следующем разделе мы увидим их гораздо больше!
Кнопки· Введение в Elm
Наш первый пример — это счетчик, который можно увеличивать или уменьшать.
Я включил полную программу ниже. Нажмите синюю кнопку «Редактировать», чтобы изменить ее в онлайн-редакторе. Попробуйте изменить текст на одной из кнопок. Нажмите синюю кнопку прямо сейчас!
Редактировать
импорт Браузер импорт Html-разоблачения (Html, кнопка, div, текст) импорт Html.Events (onClick) -- ОСНОВНОЙ основной = Browser.sandbox {инициализация = инициализация, обновление = обновление, представление = представление} -- МОДЕЛЬ псевдоним типа Модель = Int инициализация: Модель инициализация = 0 -- ОБНОВЛЯТЬ введите сообщение = приращение | Уменьшение обновление: Сообщение -> Модель -> Модель обновить модель сообщения = дело сообщение из Приращение -> модель + 1 Уменьшение -> модель - 1 -- ВИД представление: Модель -> Html Msg модель просмотра = раздел [] [кнопка [уменьшение onClick] [текст "-"] , div [] [текст (модель String.fromInt)] , кнопка [ Увеличение onClick ] [ текст "+" ] ]
Теперь, когда вы немного покопались в коде, у вас могут возникнуть вопросы. Что делает основное значение
? Как разные части сочетаются друг с другом? Давайте пройдемся по коду и поговорим об этом.
Примечание: В этом коде используются аннотации типов, псевдонимы типов и пользовательские типы. Тем не менее, цель этого раздела — дать представление об архитектуре Вяза, поэтому мы не будем рассматривать их чуть позже. Я призываю вас заглянуть вперед, если вы застряли на этих аспектах!
Основной
Основное значение
является особенным в Elm. Он описывает то, что отображается на экране. В этом случае мы собираемся инициализировать наше приложение со значением init
, функция view
будет отображать все на экране, а пользовательский ввод будет передан функции update
. Думайте об этом как о высокоуровневом описании нашей программы.
Модель
Моделирование данных чрезвычайно важно в Elm. Пункт модель предназначена для сбора всех сведений о вашем приложении в виде данных.
Чтобы сделать счетчик, нам нужно отслеживать число, которое увеличивается и уменьшается. Это означает, что наша модель на этот раз очень маленькая:
.псевдоним типа Модель = Int
Нам просто нужно значение Int
для отслеживания текущего количества. Мы можем видеть это в нашем начальном значении:
инициализация : Модель инициализация = 0
Начальное значение равно нулю, и оно будет увеличиваться и уменьшаться, когда люди нажимают разные кнопки.
Посмотреть
У нас есть модель, но как показать ее на экране? Это роль функции view
:
вид: Модель -> Html Msg модель просмотра = раздел [] [кнопка [уменьшение onClick] [текст "-"] , div [] [текст (модель String.fromInt)] , кнопка [ Увеличение onClick ] [ текст "+" ] ]
Эта функция принимает в качестве аргумента модель
. Он выводит HTML. Итак, мы говорим, что хотим показать кнопку уменьшения, текущий счет и кнопку увеличения.
Обратите внимание, что у нас есть обработчик onClick
для каждой кнопки. Они говорят: , когда кто-то нажимает, генерировать сообщение . Таким образом, кнопка «плюс» генерирует сообщение Increment
. Что это такое и куда оно девается? К функции обновления
!
Обновление
Функция update
описывает, как наша модель
будет меняться с течением времени.
Мы определяем два сообщения, которые он может получить:
тип Сообщение = Приращение | Уменьшение
Оттуда функция update
просто описывает, что делать, когда вы получаете одно из этих сообщений.
: Сообщение -> Модель -> Модель обновить модель сообщения = дело сообщение из Приращение -> модель + 1 Уменьшение -> модель - 1
Если вы получаете сообщение Increment
, вы увеличиваете модель. Если вы получаете сообщение Decrement
, вы уменьшаете модель.
Итак, всякий раз, когда мы получаем сообщение, мы прогоняем его через обновите
, чтобы получить новую модель. Затем мы вызываем view
, чтобы выяснить, как отобразить новую модель на экране. Тогда повтори! Пользовательский ввод генерирует сообщение, обновление
модели, просмотр
ее на экране. и т.д.
Обзор
Теперь, когда вы увидели все части программы Elm, может быть немного легче увидеть, как они вписываются в диаграмму, которую мы видели ранее:
Elm начинает с рендеринга начального значения на экране. Оттуда вы входите в этот цикл:
- Дождитесь ввода данных пользователем.
- Отправить сообщение на
обновить
- Произвести новую модель
- Вызовите
просмотр
, чтобы получить новый HTML - Показать новый HTML на экране
- Повторить!
Это квинтэссенция The Elm Architecture.