Clojure - Merusak

Destructuring adalah fungsionalitas dalam Clojure, yang memungkinkan seseorang untuk mengekstrak nilai dari struktur data, seperti vektor dan mengikatnya ke simbol tanpa harus secara eksplisit melintasi struktur data.

Mari kita lihat contoh apa sebenarnya arti Destructuring dan bagaimana hal itu terjadi.

Contoh

(ns clojure.examples.example
   (:gen-class))
(defn Example []
   (def my-vector [1 2 3 4])
   (let [[a b c d] my-vector]
   (println a b c d)))
(Example)

Program di atas menghasilkan keluaran sebagai berikut.

Keluaran

1 2 3 4

Dalam contoh di atas, hal-hal berikut harus diperhatikan -

  • Kami mendefinisikan vektor bilangan bulat sebagai 1, 2, 3 dan 4.

  • Kami kemudian menggunakan ‘let’ pernyataan untuk menetapkan 4 variabel (a, b, c, dan d) ke variabel vektor-saya secara langsung.

  • Jika kita menjalankan ‘println’ pernyataan pada empat variabel, kita dapat melihat bahwa mereka telah ditetapkan ke nilai dalam vektor masing-masing.

Jadi clojure telah merusak variabel my-vector yang memiliki empat nilai ketika ditugaskan menggunakan pernyataan 'let'. Empat nilai yang didekonstruksi kemudian ditetapkan ke empat parameter yang sesuai.

Jika ada variabel berlebih yang tidak memiliki nilai yang sesuai yang dapat mereka tetapkan, maka mereka akan diberi nilai nil. Contoh berikut menjelaskan hal ini.

Contoh

(ns clojure.examples.hello
   (:gen-class))
(defn Example []
   (def my-vector [1 2 3 4])
   (let [[a b c d e] my-vector]
   (println a b c d e)))
(Example)

Program di atas menghasilkan keluaran sebagai berikut. Anda dapat melihat dari output bahwa karena variabel terakhir 'e' tidak memiliki nilai yang sesuai dalam vektor, maka nilainya menjadi nihil.

Keluaran

1 2 3 4 nil

sisanya

Variabel 'the-rest' digunakan untuk menyimpan nilai yang tersisa, yang tidak dapat diberikan ke variabel apapun.

Contoh bagaimana ini digunakan ditunjukkan pada program berikut.

Contoh

(ns clojure.examples.example
   (:gen-class))
(defn Example []
   (def my-vector [1 2 3 4])
   (let [[a b & the-rest] my-vector]
   (println a b the-rest)))
(Example)

Program di atas menghasilkan keluaran sebagai berikut. Dari output, Anda dapat dengan jelas melihat bahwa nilai 3 dan 4 tidak dapat ditetapkan ke variabel apa pun sehingga nilai tersebut ditetapkan ke variabel 'sisanya'.

Keluaran

1 2 (3 4)

Merusak Peta

Sama seperti vektor, peta juga dapat dirusak. Berikut adalah contoh bagaimana hal ini dapat dicapai.

Contoh

(ns clojure.examples.example
   (:gen-class))
(defn Example []
   (def my-map {"a" 1 "b" 2})
   (let [{a "a" b "b"} my-map]
   (println a b)))
(Example)

Program di atas menghasilkan keluaran sebagai berikut. Dari program ini, Anda dapat dengan jelas melihat bahwa nilai peta "a" dan "b" diberikan ke variabel a dan b.

Keluaran

1 2

Demikian pula dalam kasus vektor, jika tidak ada nilai yang sesuai di peta saat penghancuran terjadi, maka variabel akan diberi nilai nil.

Berikut adalah contohnya.

Contoh

(ns clojure.examples.example
   (:gen-class))
(defn Example []
   (def my-map {"a" 1 "b" 2})
   (let [{a "a" b "b" c "c"} my-map]
   (println a b c)))
(Example)

Program di atas menghasilkan keluaran sebagai berikut.

Keluaran

1 2 nil