Изучай Haskell ради Добра! Ввод и вывод | Participants
|
- Statistics
- Participants
- Translate into Russian
- Translation result
- 99% translated in draft. Almost done, let's finish it!
If you do not want to register an account, you can sign in with OpenID.
Learn You a Haskell for Great Good! Input and Output | ||
Input and Output | ||
We've mentioned that Haskell is a purely functional language. Whereas in imperative languages you usually get things done by giving the computer a series of steps to execute, functional programming is more of defining what stuff is. In Haskell, a function can't change some state, like changing the contents of a variable (when a function changes state, we say that the function has side-effects). The only thing a function can do in Haskell is give us back some result based on the parameters we gave it. If a function is called two times with the same parameters, it has to return the same result. While this may seem a bit limiting when you're coming from an imperative world, we've seen that it's actually really cool. In an imperative language, you have no guarantee that a simple function that should just crunch some numbers won't burn down your house, kidnap your dog and scratch your car with a potato while crunching those numbers. For instance, when we were making a binary search tree, we didn't insert an element into a tree by modifying some tree in place. Our function for inserting into a binary search tree actually returned a new tree, because it can't change the old one. | Мы уже упоминали, что Хаскель - чисто функциональный язык. В то время как в императивных языках вы указываете компьютеру серию шагов для достижения некой цели, в функциональном программировании мы описываем чем является то или иное понятие. В Хаскеле функция не может изменить некоторое состояние, например поменять значение переменной (если функция изменяет состояние, мы говорим что функция имеет сторонние эффекты). Единственное что могут сделать функции в Хаскеле - вернуть нам некоторый результат основываясь на переданных параметрах. Если вызвать функцию дважды с одинаковыми параметрами, она вернет одинаковый результат. Если вы знакомы с императивными языками, может показаться что это ограничивает свободу наших действий, но мы видели, что на самом деле это дает весьма мощные возможности. В императивном языке у вас нет гарантии, что простая функция, которая всего-то должна обсчитать пару чисел, не сожгет ваш дом, не похитит собаку и не поцарапает машину во время вычислений. Например, когда мы создавали бинарное поисковое дерево, мы вставляли элемент в дерево не путем модификации дерева в точке вставки. Наша функция добавления нового элемента в дерево возвращала новое дерево, так как она не могла изменить старое. | |
While functions being unable to change state is good because it helps us reason about our programs, there's one problem with that. If a function can't change anything in the world, how is it supposed to tell us what it calculated? In order to tell us what it calculated, it has to change the state of an output device (usually the state of the screen), which then emits photons that travel to our brain and change the state of our mind, man. | Конечно, это хорошо что функции не могут изменять состояние, это помогает нам строить умозаключения о наших программах, но есть одна проблема. Если функция не может изменить ничего, как она сообщит нам о результатах вычислений? Для того чтобы вывести результат, функция должна изменить состояние устройства вывода (обычно это экран), который излучает фотоны, они путешествуют к нашему мозгу и изменяют состояние нашего сознания, вот так-то, чувак. | |
Do not despair, all is not lost. It turns out that Haskell actually has a really clever system for dealing with functions that have side-effects that neatly separates the part of our program that is pure and the part of our program that is impure, which does all the dirty work like talking to the keyboard and the screen. With those two parts separated, we can still reason about our pure program and take advantage of all the things that purity offers, like laziness, robustness and modularity while efficiently communicating with the outside world. | Но не надо отчаиваться, не все еще потеряно. Оказывается, в Хаскеле есть весьма умная система для работы с функциями со сторонними эффектами, которая четко разделяет чисто функциональную и "грязную" части нашей программы. "Грязная" часть программы выполняет всю грязную работу, например взаимодействие с клавиатурой и экраном. Разделив "чистую" и "грязную" части, мы можем так же свободно рассуждать о чисто функциональной части нашей программы и получать все преимущества функциональной чистоты, а именно - ленивость, гибкость, модульность, и при этом эффективно взаимодействовать с внешним миром. |
© Miran Lipovača,. License: creative commons attribution noncommercial blah blah blah ... license
