Clojure/ცვლადების და ფუნქციების გამოცხადება
def
[რედაქტირება]გლობალური ცვლადის განსაზღვრისთვის გამოიყენება def ფორმა:
user=> (def x 5)
#'user/x
user=> x
5
user=> (+ 5 x)
10
user=> (def my-list '(1 2 3))
#'user/my-list
user=> my-list
(1 2 3)
user=> (last my-list)
3
როდესაც ცვლადი იქმნება ხდება შემდეგი რამ. ის რასაც def აბრუნებს არის var, რომელიც არის ობიეტქი, რომელსაც აქვს მნიშვნელობა, მაგალითად 5. აგრეთვე იქმნება სიმბოლო, რომელიც ებმება ამ var-ს.
defn
[რედაქტირება]ფუნქციები შეიძლება შეიქმნას defn-ის გამოყენებით:
user=> (defn election-year? [year]
(zero? (rem year 4)))
#'user/election-year?
user=> (election-year? 2007)
false
user=> (election-year? 2008)
true
ფუნქცია არის ობიექტის ნაირსახეობა, რომლის გამოძახება შეიძლება.
პირვალი არგუმენტი defn-ში არის ფუნქციის სახელი, რომელიც იქნება სიმბოლო, მიბმული ამ ფუნქციაზე. მეორე არგუმენტი არის ფუნქციის არგუმენტების სია. არგუმენტების სია ყოველთვის ვექტორით გამოისახება. defn-ის დარჩენილი არგუმენტები შეიძლება იყოს ერთი ან რამდენიმე გამოსახულება. ბოლო გამოსახულების შედეგი არის ფუნქციის დასაბრუნებელი მნიშვნელობა.
fn-ის გამოყენება
[რედაქტირება]ანონიმური ფუნქცია შეიძლება შეიქმნას fn-ის გამოყენებით:
user=> (fn [x] (+ x 1))
user.eval__2384$fn__2386@c4b579
user=> ((fn [x] (+ x 1)) 9)
10
რადგანაც ფუნქციები უბრალოდ ობიექტებია, ისინი შეიძლება სიმბოლოს მიებას (მიენიჭოს ცვლადს):
user=> (def plus-one
(fn [x] (+ x 1)))
#'user/plus-one
user=> (plus-one 9)
10
ფორმა defn სინამდვილეში არის მაკროსი, რომელსაც თავისი შიგთავსი გადაჰყვანს def + fn კომბინაციაში.
doc ფორმა
[რედაქტირება]თითქმის ყველა ფორმას Clojure-ში აქვს ჩადგმული დოკუმნეტაცია. თუ გინდათ სწრაფად გაიგოთ მეტი ფორმის შესახებ ინფორმაცია, გადაეცით ფორმის სახელი doc ფორმში:
user=> (doc first)
-------------------------
clojure/first
([coll])
Returns the first item in the collection. Calls seq on its
argument. If coll is nil, returns nil.
nil
ფუნქციის დოკუმენტირება
[რედაქტირება]არსებობს ფუნქციის დოკუმენტირების რამოდენიმე გზე. აი უმარტივესი:
user=> (defn plus-one
"Returns a number one greater than x"
[x]
(+ x 1))
#'user/plus-one
user=> (doc plus-one)
-------------------------
user/plus-one
([x])
Returns a number one greater than x
nil
აი მეორე საშუალებაც:
user=> (defn plus-one
{:doc "Returns a number one greater than x"}
[x]
(+ x 1))
#'user/plus-one
user=> (doc plus-one)
-------------------------
user/plus-one
([x])
Returns a number one greater than x
nil