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-ს პროგრამებში.