如何在 Clojurescript 中捕獲任何 JavaScript 異常?
在我們的程式碼中,通常會遇到錯誤問題。錯誤會干擾應用程式的正常流程。因此,需要在程式碼中處理錯誤異常才能在任何程式語言中實現任何應用程式。現在,我們將瞭解如何在 Clojurescript 中處理異常。在此之前,我們先了解什麼是 Clojurescript。
什麼是 ClojureScript?
從根本上說,Clojurescript 是 Closure 程式語言的一個方言,用於編譯成 JavaScript。實際上,Closure 最初只編譯成 Java 虛擬機器位元組碼,後來在 2011 年,Clojurescript 作為一種將 Closure 引入客戶端開發的選項出現。
Clojurescript 的構建層次高於 JavaScript。在 JavaScript 中,通常處理變數、迴圈、條件、函式、陣列和物件。對於 Clojurescript,我們處理表達式、集合、序列和轉換。當我們檢視 Clojurescript 的許多使其與 JavaScript 不同的特性時。
除了少數細微差別外,它們實際上是同一種語言。不同之處在於目標環境。Closure 建立在 Java 虛擬機器上並與 Java 整合。ClojureScript 編譯成 JavaScript,並在瀏覽器或 Node.js 環境中執行。
現在,讓我們來看一個如何在 JS 和 ClosureScript 中進行函式呼叫的示例。
在面向物件的 JS 函式呼叫中:
employeeRecords.findOne("employee details");
這裡,employeeRecords 是一個物件,findOne 是一個函式,“employee details”是引數。
在 JavaScript 函式呼叫中:
findOne(employeeRecords, "employee details");
這裡,findOne 是一個函式,employeeRecords,“employee details”是引數。
同樣的例子,我們來看看 ClosureScript。
(findOne employeeRecords "employee details");
這裡,findOne 函式和 employeeRecords “employee details”是引數。在 Clojurescript 中,與函式式 JavaScript 程式碼唯一的區別是左括號移到了左邊,引數之間沒有逗號。
Clojurescript 編譯器的最重要特性之一是它生成 Google Closure 模組,然後它利用 Closure 編譯器來最佳化 JavaScript。
處理錯誤異常
在錯誤異常中,我們有兩個類別:
擴充套件 Throwable 類的類期望 RuntimeException,即已檢查異常。例如 IOException、SQLException 等。這些在編譯時進行檢查。
擴充套件 RuntimeExceptions 的類,即未檢查異常,例如 NullPointerException、ArithmeticException、ArrayIndexOutOfBoundException。它們在執行時而不是編譯時進行檢查。
示例
讓我們來看一個例子。
(ns clojureScript.examples (:gen-class)) ;; This program displays employee details (defn Example [] (def employee (slurp "Employee.txt")) (println employee)) (Example)
輸出

這裡,slurp 用於讀取檔案中的所有內容。我們可以觀察到 Employee.txt 檔案不存在。因此,它將丟擲 FileNotFoundException 作為輸出。
使用 try/catch/finally 處理
在 Clojurescript 中處理錯誤異常與在 JavaScript 中處理錯誤異常更相似,而不是不同。ClojureScript 提供了一個名為 try 的特殊形式,它編譯成 JavaScript 中的 try/catch 結構。讓我們來看一個例子
示例
(ns clojureScript.examples
(:gen-class))
;; This program displays employee details
(defn Example []
(try
(def employee (slurp "Employee.txt"))
(catch Exception e (println (str "caught exception: " (.toString e))))
(finally (println "This is our final block, it will execute always")))
(println "Let's move on"))
(Example)
輸出

這裡,Employee.txt 是一個不存在的檔案。FileNotFoundException 由 catch 塊處理。
示例
讓我們檢查另一個例子,當我們嘗試訪問陣列中不存在的更大索引時。
(ns clojureScript.examples
(:gen-class))
;; This program displays employee details
(defn Example []
(try
(aget (int-array [1 2 3 4]) 5)
(catch Exception e (println (str "caught exception: " (.toString e))))
(finally (println "This is our final block, it will execute always")))
(println "Let's move on"))
(Example)
輸出

這裡,我們嘗試從陣列 [1 2 3 4] 中訪問 5 個索引,因此 ArrayIndexOutOfBoundException 由 catch 塊處理。
在 **catch** 塊中,您可以編寫自定義程式碼來處理異常。這樣我們就可以使我們的應用程式執行無誤。
**finally** 塊位於 try 塊或 catch 塊之後。finally 程式碼塊始終執行,無論是否發生異常。
我們可以使用多個 catch 塊來處理多種型別的異常。每個 catch 塊都取決於我們的程式碼中引發的異常型別。
示例
讓我們來看一個例子
(ns Clojurescript.example
(:gen-class))
(defn Example []
(try
(def string1 (slurp "Example.txt"))
(println string1)
(catch java.lang.ArrayIndexOutOfBoundsException e (println (str "caught file exception: " (.getMessage e))))
(catch Exception e (println (str "caught exception: " (.getMessage e))))
(finally (println "This is our final block, it will execute always")))
(println "Let's move on"))
(Example)
輸出

使用任何 Clojure IDE 線上編輯器來執行此程式。像這樣,我們將處理 ClosureScript 中的異常。希望本文能提供有關 ClosureScript 和 ClosureScript 中錯誤處理的知識。
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP