Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add translation of “03-04 Functions” #52

Merged
merged 3 commits into from
Mar 2, 2017

Conversation

AMashoshyna
Copy link
Contributor

@AMashoshyna AMashoshyna commented Feb 21, 2017

Draft translation of 03 04 functions #9

@AMashoshyna AMashoshyna changed the title Draft translation of 03 04 functions [#9](https://github.com/LambdaBooks/clojurescript-unraveled/issues/9) Draft translation of 03 04 functions Feb 21, 2017

За більш детальною інформацією щодо визначення контексту направляємо читачів до [статті з Вікіпедії](http://en.wikipedia.org/wiki/Scope_(computer_science)), у якій вичерпно роз’яснюються різні типи визначення контексту.

Для виклику функцій у ClojureScript використовується типова для діалектів Lisp префіксну нотацію:

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Використовується префіксна натоція

;; => 2
```

У наведеному прикладі `inc` - це функція та частина середовища виконання (рантайму) ClojureScript, а `1` - це перший аргумент функції `inc`.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

А 'і' - перший аргумент функції інк (не потрібно вдруге використовувати це;)

;; => 6
```

Символ `+` представляє функцію додавання. На відміну від мов родини ALGOL, де знаком `+` позначається оператор додавання, що допускає лише два параметри, у ClojureScript символ `+` означає функцію і кількість її параметрів не обмежена.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Символ '+' означає функцію, кількість параметрів якої не обмежена


Символ `+` представляє функцію додавання. На відміну від мов родини ALGOL, де знаком `+` позначається оператор додавання, що допускає лише два параметри, у ClojureScript символ `+` означає функцію і кількість її параметрів не обмежена.

Префіксна нотація має значні переваги, в тому числі досить неочевидні. ClojureScript не розрізняє функції та оператори, кожен оператор - це функція. Префіксна нотація знімає обмеження на кількість аргументів будь-якого “оператора”. Також префіксна нотація повністю усуває проблему пріоритету операторів.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ClojureScript не розрізняє функції та оператори:(!) кожен оператор - це функція.
Префіксна нотація знімає обмеження на кількість аргументів будь-якого “оператора”,(!) а також повністю усуває проблему їхнього пріоритету

;; => 25
```

Приступимо до створення іменованих функцій. Але спочатку спитаємо себе: що таке _іменована функція_? Все дуже просто: у ClojureScript функції - це об’єкти першого класу, що поводяться як будь-які інші значення, тому іменування функція - це поєднання функції та певного символа.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

поводяться,(!) як будь-які інші значення, тому іменування функціЇ - це її поєднання з певним символом

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

або
спитаємо себе ,(!) що таке іменована функція?
або
спитаємо себе: "що таке іменована функція?"

у ClojureScript ,(!) функції

іменування функції

(+ x increment)))
```

Рядок : `([x] (myinc x 1))` означає, що за наявності лише одного аргумента слід викликати функцію `myinc` із цим аргументом та числом `1` у якості другого аргумента. Друге тіло функції `([x increment] (+ x increment))` означає, що якщо аргументів два, слід повернути результат додавання цих аргументів.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

слід викликати функцію myinc із цим аргументом та числом 1 -(!) у якості другого аргумента.


#### Скорочений синтаксис анонімних функцій

Для визначення анонімних функцій _ClojureScript_ пропонує скорочений синтаксис із використанням макросу читання `#()` (як правило, використовується із однорядковими функціями). Макроси читання - це спеціальні вирази, що трансформуються у відповідну мовну форму під час компіляції. У цьому випадку - у вираз, що використовує спеціальну форму `fn`.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Для визначення анонімних функцій,(!) ClojureScript пропонує

;; => 3.5
```

Попередній вираз представляє собою скорочений запис наступного:

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Попередній вираз є скороченим записом наступного:

;; => 25
```

Приступимо до створення іменованих функцій. Але спочатку спитаємо себе: що таке _іменована функція_? Все дуже просто: у ClojureScript функції - це об’єкти першого класу, що поводяться як будь-які інші значення, тому іменування функція - це поєднання функції та певного символа.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

або
спитаємо себе ,(!) що таке іменована функція?
або
спитаємо себе: "що таке іменована функція?"

у ClojureScript ,(!) функції

іменування функції

(* x x))
```

Рядок між ім’ям функції та вектором параметрів називається _документаційним рядком_ _(docstring)_. Ці рядки будуть використані програмами, що автоматично створюють веб-документацію з сирцевих файлів.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Рядок ,(!) між ім’ям функції та вектором параметрів,(!) називається

Ці рядки використовуються програмами

@denysdovhan denysdovhan dismissed Mariannach’s stale review March 2, 2017 11:41

These changes are made

@denysdovhan denysdovhan merged commit 0c5d422 into LambdaBooks:master Mar 2, 2017
@denysdovhan denysdovhan changed the title Draft translation of 03 04 functions Add translation of “03-04 Functions” Mar 2, 2017
@denysdovhan denysdovhan added done and removed review labels Mar 2, 2017
@denysdovhan denysdovhan mentioned this pull request Mar 21, 2017
36 tasks
@AMashoshyna AMashoshyna deleted the 03-04-functions branch June 13, 2017 07:26
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Development

Successfully merging this pull request may close these issues.

None yet

5 participants