說到編程語言,老是繞不開數據類型,由於數據類型決定了數據能夠進行什麼樣的操做。同時數據類型html
從廣義上來講是一種數據結構,在過程式編程的過程當中,曾經有過這樣一種說法:算法
程序 = 數據結構 + 算法
可見數據類型的重要性。大致來講,編程語言有三種: 強類型語言, 弱類型語言,介於二者之間的語言。編程
強類型語言要求變量定義的時候必須明確數據類型,弱類型語言不要求在變量定義時明確數據類型。數據結構
1、強類型語言、弱類型語言編程語言
咱們所知的C語言系的語言都要求變量定義時明確數據類型,例如C語言、C++、Java語言等都是強類型函數
語言。 而VBS等腳本語言,則是弱類型的語言。 這就決定了vbs定義變量時不須要明確數據類型。測試
下面是各類語言定義變量時的語法。spa
//我是C語言,我是強類型語言 //定義變量時肯定數據類型 int nAge;
//我是C++, 我也是強類型語言 class A { }; //類實例化的時候須要指定對象的類型 A objectA;
//我是Delphi的Pascal, 我也是強類型語言 //定義變量須要指定類型 var nPage:integer;
'我是vbs,我是弱類型語言 '定義變量不須要指定數據類型 Dim varTest
2、vbs的數據類型code
這篇文章咱們簡單的來描述一下vbs中數據類型的相關內容。htm
'vbs中的數據類型 'vbs腳本中的數據只有一種數據類型,就是variant '能夠將vbs變量當作一個具備AI功能的容器,能夠識別不一樣的數據類型 '更準確的是: '一、vbs只有一種數據類型variant '二、vbs變量的數據類型都對應一個子類型 '三、能夠將variant當作一個基類,子數據類型當作派生類, '四、vbs是具備OOP特性的一種腳本編程語言 '五、vbs變量在同一時刻,只能表示一種數據類型,或者說只能存儲一種 ' 數據類型的數據; 不能既存儲Long型又同時存儲string型字符串 '六、vbs變量能夠自動爲存儲的數據選擇合適的數據類型 '七、這裏須要說道賦值運算,當一個變量第一次賦值的時候,vbs就假定 ' 這個變量的數據類型爲賦值時的子類型。除非再一次賦值,不然就一直 ' 保持第一次賦值的子類型不變 'vbs中的數據類型檢測函數 '一、vartype 函數, 這個函數返回數據類型的常量信息 '二、typename 函數,這個函數返回數據類型的字符串信息 Dim var var = 10 MsgBox VarType(var) MsgBox TypeName(var) var = "volcanol" MsgBox VarType(var) MsgBox TypeName(var) '關於輸入對話框InputBox的輸入處理 'InputBox輸入對話框返回的是字符串 Dim strDataType MsgBox TypeName(InputBox("請輸入最大年齡的數值","最大年齡","150")) '這裏須要注意isnumeric函數檢查輸入的變量是否都是數字 '若是都是由 0-9 之間的數字組成的,那麼返回True,不然返回false '這一點須要注意 If IsNumeric(InputBox("測試輸入的值是不是數值","輸入數值")) Then MsgBox "測試isnumeric函數的做用" End If '在vbs中也有與C語言中同樣的類型轉換:強制類型轉換、隱式類型轉換 '強制類型轉換經過函數實現 '隱式類型轉換vbs會自動完成 '再看下面的例子,由於nMaxAge要進行算術減法,因此vbs腳本引擎會將 'nMaxAge解釋爲一個int型數據 Dim nMaxAge Dim nMinAge Dim nDiffAge '第一次賦值的時候,nMaxAge是string類型 nMaxAge = InputBox("請輸入最大年齡的數值","最大年齡","200") '第一次賦值的時候 nMinAge = 0 MsgBox "第一次賦值後 nMinAge的類型是:" & TypeName(nMinAge) '這個地方要進行計算,- 須要的是數字類型,這個地方表達式中 '會將 nMaxAge 的 string類型隱式類型轉換爲 double 類型, '而後再與nMinAge 進行計算. 須要注意的是隱式類型時的要點。 nDiffAge = nMaxAge - nMinAge MsgBox nDiffAge MsgBox "nDiffAge數據類型是:" & TypeName(nDiffAge) '下面表達式的類型是integer MsgBox "1 + 2 表達式的類型是: " & TypeName(1+2) '日期和時間類型 MsgBox Date() MsgBox TypeName(Date()) MsgBox Time() MsgBox TypeName(Time()) '注意日期類型常量的使用兩個##符號引用起來的一個字符串, '就和下面的例子同樣 MsgBox TypeName(#2018/11/23#) MsgBox "日期的數值是:" & CLng(#2018/11/23#) MsgBox "數字65535對應的日期是:" & CDate(65535) MsgBox "數字0對應的日期是:" & CDate(0) MsgBox #1970/1/1# '注意時間的常量與日期常量的不一樣 MsgBox TypeName("14:19:29") '前面咱們說過 & 和 + 均可以進行字符串的鏈接 '由於 + 符號還能夠做爲加法運算符,所以這裏須要注意在 '使用過程當中的隱式類型轉換 '例如咱們想輸出一個 100234 的字符串 Dim strTest Dim nTest strTest = CStr(100) nTest = 234 '不能輸出字符串 MsgBox strTest + nTest '能夠輸出字符串 MsgBox strTest & nTest '******************************************* ' + 符號的規則 ' 一、若是兩邊都是數字,按照數字計算 ' 二、若是一邊是數字類型,則看另外一邊是否能隱式類型轉換爲數字 ' 若是能隱式類型轉換,則按照數字計算加法求和, 不然就報錯 ' ' 三、若是兩邊都是字符串,那麼就鏈接字符串 ' ' 四、字符串類型最好用 & 進行鏈接 'Empty 和 NULL '若是一個變量未進行初始化則其類型爲Empty Dim varEmpty MsgBox TypeName(varEmpty) '下面的函數調用也進行了隱式類型轉換,將empty類型的變量轉換爲string類型 MsgBox varEmpty If IsEmpty(varEmpty) Then MsgBox "varEmpty變量未初始化" End If '這裏還須要注意的是empty這個常量, varEmpty = Empty If IsEmpty(Empty) Then MsgBox "varEmpty = Empty 賦值後,已經初始化" Else MsgBox "varEmpty = Empty賦值後,已經初始化,這一段不執行" End If If varEmpty = Empty Then MsgBox "varEmpty = Empty 後,其值就是Empty,執行這一段" Else MsgBox "varEmpty = Empty後,其值是Empty,邏輯結果爲真,這一段不執行" End If Dim varNull varNull = Null MsgBox TypeName(varNull) '下面的語句不能執行,這個地方就是NULL和empty的區別 '並且通常只有顯示的給變量賦值爲NULL,變量的值纔是NULL 'MsgBox varNull If IsNull(varNull) Then MsgBox "varNull變量的值是NULL" End If If IsEmpty(varNull) Then MsgBox "varNull變量沒有初始化" Else MsgBox "varNull變量已經初始化" End If
上面的代碼由一個地方須要注意,就是124行那一句,若是直接用msgbox Null 的話會報錯。以下面的圖
所示:
3、Tips
雖然vbs是一種弱類型的語言,可是這並不妨礙咱們編寫出合格的健壯的代碼。 這裏有幾個要點能夠
提升代碼健壯性。
一、一個變量只用來作一件事。
二、利用匈牙利命名法來實現代碼的自描述,經過增長前綴來講明變量的類型。
三、變量在初始化的時候儘可能進行強制類型轉換。
四、注意vbs的隱式類型轉換規則
五、注意各類類型的區別。
--------------------------------------------------------------分割線---------------------------------------------------------------
一、文章均爲我的原創,歡迎轉載,轉載請保留出處:https://www.cnblogs.com/volcanol/
二、獲取工控PLC、變頻器、HMI、計算機、Windows、Linux、嵌入式資料點擊:獲取資料
三、若是您以爲文章對您有幫助可轉至頁面上半部分打賞,或移步:打賞
四、或者在頁面右下角點推薦喲!!!
--------------------------------------------------------------分割線------------------------------------------------------------