Files
freeCodeCamp/guide/russian/clojure/create-local-variables-with-let/index.md
2018-10-16 21:32:40 +05:30

58 lines
3.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
title: Clojure Create Local Variables with Let
localeTitle: Clojure Создание локальных переменных с Let
---
`let` это фундаментальная часть Clojure. Если `def` создает глобальную переменную, `let` создает локальную переменную.
```
(def x 5)
(println x)
; => 5
; nil
(let [x 2]
(println x))
; => 2
; nil
(println x)
; => 5
; nil
```
![:rocket:](//forum.freecodecamp.com/images/emoji/emoji_one/rocket.png?v=2 ": Ракета:") [IDEOne!](https://ideone.com/xcNth2)
`x` в этом примере никогда не изменяется. `x` просто ссылается на что-то другое внутри нашей привязки `let` . Это может быть полезным способом избежать повторения внутри функции.
Это невероятно полезно. Слишком много глобальных переменных может привести к неприятным ошибкам и непреднамеренному поведению.
```
(def x 5)
(defn add-5 [y] (+ xy))
(add-5 5)
; => 10
(defn change-x []
(def x 6))
(change-x)
; => nil
(add-5 5)
; => 11
```
![:rocket:](//forum.freecodecamp.com/images/emoji/emoji_one/rocket.png?v=2 ": Ракета:") [IDEOne!](https://ideone.com/MFjA3C)
О, о! Это больше не добавляет 5! Конечно, этот пример немного глуп, но использование слишком большого числа глобальных переменных может привести к ошибкам, столь же страшным, как этот.
**Примечание.** Мы не _переназначаем_ здесь `x` , как на языке C. Мы просто создаем новую переменную, которая также называется x. Это _очень, очень, **очень**_ плохая идея.
## Множественные привязки
`let` также может определять сразу несколько переменных и может назначать переменные выражениям.
```
(let [spam "foo"
ham (str "b" "ar")] ; str is a function that concatenates strings
(println spam ham)) ; or converts variables into strings.
; => foo bar
; nil
```
![:rocket:](//forum.freecodecamp.com/images/emoji/emoji_one/rocket.png?v=2 ": Ракета:") [IDEOne!](https://ideone.com/y5EBIM)
| [![:point_left:](//forum.freecodecamp.com/images/emoji/emoji_one/point_left.png?v=2 ": Point_left:") Предыдущая](//forum.freecodecamp.com/t/clojure-conditionals/18412) | [![:book:](//forum.freecodecamp.com/images/emoji/emoji_one/book.png?v=2 ":книга:") Главная ![:book:](//forum.freecodecamp.com/images/emoji/emoji_one/book.png?v=2 ":книга:")](//forum.freecodecamp.com/t/clojure-resources/18422) | [следующий ![:point_right:](//forum.freecodecamp.com/images/emoji/emoji_one/point_right.png?v=2 ": Point_right:")](//forum.freecodecamp.com/t/clojure-loop-recur/18418) |
| [Условные](//forum.freecodecamp.com/t/clojure-conditionals/18412) | [Содержание](//forum.freecodecamp.com/t/clojure-resources/18422) | [Loop и Recur](//forum.freecodecamp.com/t/clojure-loop-recur/18418) |