Clojure/ვექტორები, რუკები და სიმრავლეები
სიების მონაცემთა ტიპის გარდა, Clojure გვაძლევს ვექტორების, რუკების და სიმრავლეების განსაზღვრის სინტაქს. ვექტორები არის ნულოვან-ინდექსიანი მასივები. აი მაგალითები:
user=> [1 2 3]
[1 2 3]
user=> []
[]
user=> ["a" "b" "c"]
["a" "b" "c"]
user=> [:foo "bar" 3]
[:foo "bar" 3]
user=> [1 2 [10 20]]
[1 2 [10 20]]
ვექტორები ძალიან ჰგვანან სიებს. განსხვავება არის საბაზისო მონაცემთა სტრუქტურაში. სიებს და ვექტორებს სხვადასხვა წარამადობა ახასიათებთ.
კიდევ ერთი განსხვავებაა, რომ ვექტორის სინტაქსი არ იწვევს ოპერაციის შესრულებას. მხოლოდ სიის სინტაქსით შეიძლება ოპერაციის შესრულება.
თქვენ აგრეთვე შეგიძლიათ ვექტორის შექმნა ელემენტების გადაცემით vector
ოპერატორზე:
user=> (vector 1 2 3)
[1 2 3]
რუკები განსაზღვრავენ უნიკალურ გასაღები-მნიშვნელობა წყვილების სიმრავლეს.
user=> {"a" 1, "b" 2, "c" 3}
{"a" 1, "b" 2, "c" 3}
ეს რუკა აწყვილებს ტექსტს "a"
რიცხვთან 1
, "b"
რიცხვთან 2, და "c"
რიცხვთან 3
. მძიმეები წყვილებს შორის არააუცილებელია, და საჭიროა კოდის კითხვადობის გასაზრდელად. Clojure მათ თითქმის ისევე განიხილავს როგორც ცარიელი ადგილის სიმბოლოს. მძიმის დასმა შეგიძლიათ გამოსახულების ელემენტებს შორის ნებისმიერ ადგილას:
user=> {"a" 1 "b" 2 "c" 3}
{"a" 1, "b" 2, "c" 3}
user=> {"a", 1, "b", 2, "c", 3}
{"a" 1, "b" 2, "c" 3}
user=> {"a" 1 ,"b" 2 ,"c" 3}
{"a" 1, "b" 2, "c" 3}
დააკვრდით, რომ Clojure-მ იცის თუ სად იყო გამოყენებული მძიმეები, თუმცა ეს უფრო მეტი თავსებადობისთვის კეთდება მხოლოდ.
როდესაც რუკა განსაზღვრულია, მისი მნიშვნელობების ამოღება შეგიძლიათ get
ფორმის გამოყენებით:
user=> (get {"a" 1, "b" 2, "c" 3} "a")
1
user=> (get {"a" 1, "b" 2, "c" 3} "b")
2
user=> (get {"a" 1, "b" 2, "c" 3} "c")
3
user=> (get {"a" 1, "b" 2, "c" 3} "d")
nil
თუმცა ამ ყველაფრის უფრო მარტივად მიღების გზაც არსებობს:
user=> ({"a" 1, "b" 2, "c" 3} "a")
1
user=> ({"a" 1, "b" 2, "c" 3} "b")
2
user=> ({"a" 1, "b" 2, "c" 3} "c")
3
user=> ({"a" 1, "b" 2, "c" 3} "d")
nil
რუკები შეიძლება გამოვიყენოთ მათი გასაღების ფუნქციებად. ეს თავიდან ცოტა უცნაურია, მაგრამ ნელ-ნელა ეს აღნიშვნები სულ უფრო გასაგები გახდება.
აი მესამე გზა, თუ როგორ მიიღოთ მნიშვნელობა გასაღებიდან:
user=> (:a {:a 1, :b 2, :c 3})
1
user=> (:b {:a 1, :b 2, :c 3})
2
user=> (:c {:a 1, :b 2, :c 3})
3
user=> (:d {:a 1, :b 2, :c 3})
nil
მნიშვნელოვანია, რომ ბოლო ორი გამოყენების სცენარი კარგად იცოდეთ, იმიტომ რომ ისინი ხშირად შეგხვდებათ Clojure-ს პროგრამებში.