freeCodeCamp/guide/russian/clojure/create-local-variables-with.../index.md

3.4 KiB
Raw Blame History

title localeTitle
Clojure Create Local Variables with Let 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: IDEOne!

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: IDEOne!

О, о! Это больше не добавляет 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: IDEOne!

| :point_left: Предыдущая | :book: Главная :book: | следующий :point_right: |
| Условные | Содержание | Loop и Recur |