核心要點
type-of()
、unit()
和 unitless()
。這些函數可用於檢查輸入數據的類型和單位,如果輸入不符合預期標準,則會拋出錯誤。 @function
指令定義新函數,並使用 @return
指令根據驗證檢查返回一個值。 @error
指令可用於拋出自定義錯誤消息,提供有關錯誤性質以及如何修復錯誤的詳細信息。 編寫 Sass 並由其他人使用時,他們很可能在使用你的代碼時出錯。事實上,老實說,當我編寫 Sass 並幾天后(甚至幾小時後)使用它時,我都會在自己的代碼中犯錯。你可能也會。幸運的是,Sass 有許多函數可以幫助我們驗證開發者放入我們編寫的 Sass 中的輸入。
這些技術對於共享 Sass mixin 或維護入門工具包或一組 mixin 和函數的團隊尤其有用。開發者在使用共享Sass 庫時有兩個選擇:他們可以通過電子郵件、聊天、ping 或其他方式打斷彼此以尋求自定義mixin 的幫助,或者使用包含代碼驗證的詳細文檔來幫助彼此輕鬆地排除代碼故障。 (就這一點而言,這不僅僅是 Sass 的問題:任何共享代碼都需要通過中斷或文檔進行通信。)現在讓我們學習一些最有用的 Sass 驗證方法。
驗證單個值
Mixin 和函數採用參數。如果你將代碼傳遞給工作中的其他開發者或發布開源庫,則需要確保參數與你的意圖相符。這些函數對於驗證參數中的變量很有用。
variable-exists()
如果你的函數或 mixin 依賴於開發者定義的變量,請使用恰如其分的 variable-exists()
函數確保變量存在。此函數根據是否已創建和定義變量返回 true 或 false。
<code class="language-sass">@mixin create-font-size() { @if variable-exists(base-font) { font-size: $base-font; } @else { @error "请定义变量 `$base-font`。"; } @if variable-exists(line-height) { line-height: $line-height; } @else { @error "请定义变量 `$line-height`。"; } } // 开发者的代码 $base-font: 18px; $line-height: 1.5; .element { @include create-font-size; }</code>
但是,比依賴於開發者正確設置全局變量更好的選擇是在你的庫中包含這些默認變量:
<code class="language-sass">// 你的插件: $base-font: 18px !default; $line-height: 1.5 !default; @mixin create-font-size() { //等等... } // 开发者的代码: $base-font: 16px; p { @include create-font-size(); }</code>
type-of()
如果你需要知道變量表示的值的類型,請使用 type-of()
。此函數將返回以下字符串之一:
這對於驗證某些類型的輸入很有用。你可以確保開發者只將數值傳遞給創建尺寸的 mixin:
<code class="language-sass">@mixin create-font-size() { @if variable-exists(base-font) { font-size: $base-font; } @else { @error "请定义变量 `$base-font`。"; } @if variable-exists(line-height) { line-height: $line-height; } @else { @error "请定义变量 `$line-height`。"; } } // 开发者的代码 $base-font: 18px; $line-height: 1.5; .element { @include create-font-size; }</code>
你還可以使用 type-of()
來確保顏色 mixin 只處理顏色:
<code class="language-sass">// 你的插件: $base-font: 18px !default; $line-height: 1.5 !default; @mixin create-font-size() { //等等... } // 开发者的代码: $base-font: 16px; p { @include create-font-size(); }</code>
如果你需要開發者為主題創建配置設置映射,你可以確保他們擁有有效的映射:
<code class="language-sass">@mixin size($height, $width: $height) { @if type-of($height) == number { height: $height; } @else { @warn "确保 `$height` 是一个数字。"; } @if type-of($width) == number { width: $width; } @else { @warn "确保 `$width` 是一个数字。"; } }</code>
unit()
有時,函數或 mixin 中的數學運算需要其參數中的特定單位。你可以使用 unit()
來確認值是否具有正確的單位。例如,你可能會使用一個 mixin 來創建像素和 rem 單位的尺寸。 (注意,你最好為此使用任務運行程序包,但如果你需要將其保留在 Sass 中,請繼續閱讀。)
<code class="language-sass">@function color-fade($color) { @if type-of($color) == 'color' { @return rgba($color, .8); } @else { @warn "确保你将有效的颜色传递给 color-fade() 函数。"; } }</code>
驗證列表和映射
我們已經看到如何使用 type-of()
來確保變量包含列表或映射。我們還可以測試兩件重要的事情:值是否在列表中,以及鍵是否在映射中。
index()
index()
函數將告訴你值是否在列表中找到。從技術上講,它將返回值在列表中的位置(一個數字)或 null。它不是一個真正的布爾函數,但就我們在這裡的目的而言,真值和假值就足夠了。
index()
函數採用兩個參數:列表和你想要在列表中查找的值。此函數對於測試測量 mixin 中的某些值很有用。如果我們有一個使用 CSS top、right、bottom 或 left 速記法輸出填充或邊距計算的 mixin,我們希望確保我們不會嘗試計算 initial、inherit 或 auto 等值。
<code class="language-sass">@mixin generate-theme($settings) { @if type-of($settings) == 'map' { // 此处输出 } @else { @warn "确保 `$settings` 是一个 Sass 映射。"; } }</code>
map-has-key()
如果你正在檢查映射中的特定鍵,可以使用 map-has-key()
函數確保鍵存在於你正在檢查的映射中。如果你使用 $breakpoints
映射和媒體查詢 mixin,這將非常有用:
<code class="language-sass">$rem-size: 16px !default; @mixin px-rem($property, $value) { @if unit($value) == 'px' { #{$property}: $value; #{$property}: $value / $rem-size * 1rem; } @elseif unit($value) == 'rem' { #{$property}: $value * $rem-size / 1rem; #{$property}: $value; } @else { @warn "确保 `$value` 以 px 或 rem 为单位。"; } }</code>
驗證 Mixin 和函數
有時,你將編寫一個依賴於現有 mixin 或函數或其他 Sass 庫的 mixin 或函數。讓我們更新上一個示例中的 bp()
mixin 以依賴於 Breakpoint Sass 庫。我們可以像這樣擴展它:
<code class="language-sass">$rem-size: 16px !default; @mixin margin-rem($values...) { $output: (); @each $value in $values { @if index(auto inherit initial 0, $value) { $output: append($output, $value); } @else { $output: append($output, $value / $rem-size * 1rem); } } margin: #{$output}; }</code>
現在我們的 bp()
mixin(更短且使用映射值)將在其存在時使用 breakpoint()
mixin。如果沒有,它將回退到我們自己的媒體查詢 mixin 代碼。
有一個匹配的函數叫做 function-exists()
。你可以用它來測試特定函數是否存在。如果你有依賴於非標準函數的數學運算,你可以確保包含包含該函數的庫。 Compass 添加了一個 pow()
函數用於指數數學。如果你正在創建需要該函數的字體大小比例,請對其進行測試:
<code class="language-sass">@mixin create-font-size() { @if variable-exists(base-font) { font-size: $base-font; } @else { @error "请定义变量 `$base-font`。"; } @if variable-exists(line-height) { line-height: $line-height; } @else { @error "请定义变量 `$line-height`。"; } } // 开发者的代码 $base-font: 18px; $line-height: 1.5; .element { @include create-font-size; }</code>
報告問題:@warn
和 @error
正如你在上面的代碼示例中可能注意到的那樣,當我們的驗證捕獲一些不正確的輸入時,我已經註意向開發者提供良好的反饋。大多數情況下,我使用了 @warn
。此指令將消息發送到開發者的控制台,但允許編譯器完成運行。
有時,當我需要完全停止編譯器時(沒有特定的輸入或函數,大量的輸出將被破壞),我使用 @error
將消息發送到控制台並停止編譯器。
有關 @warn
和 @error
之間區別的更多信息,你可能需要查看我之前關於此主題的文章或 SitePoint 的 Sass 參考中的相應部分。
結論
沒有人是完美的——那些使用我們代碼的人不是,甚至在我們編寫代碼幾個小時後我們自己也不是!這就是為什麼通過驗證 mixin 和函數中的輸入來幫助我們自己和他人非常重要的原因。這些技術不僅可以幫助你更有效地使用自己的代碼,還可以使團隊更容易共享和維護 Sass 庫。
你如何防止 Sass 中的錯誤?請在評論中告訴我們!
關於在 Sass Mixin 和函數中驗證輸入的常見問題解答 (FAQ)
在 Sass mixin 和函數中驗證輸入對於維護代碼的完整性和功能至關重要。它有助於確保傳遞到 mixin 和函數中的數據類型正確,並且符合預期的格式。這可以防止代碼中的錯誤和 bug,使其更強大、更可靠。它還可以使你的代碼更易於調試和維護,因為你可以快速識別和糾正輸入數據中的任何問題。
Sass 提供了一些內置函數,你可以使用這些函數來驗證 mixin 和函數中的輸入。其中包括 type-of()
、unit()
和 unitless()
等。你可以使用這些函數來檢查輸入數據的類型和單位,如果輸入不符合預期標準,則會拋出錯誤。例如,你可以使用 type-of()
函數來檢查輸入是否為數字,如果不是,則會拋出錯誤。
是的,你可以在 Sass 中創建自定義驗證函數。如果你需要執行無法使用內置函數實現的更複雜的驗證檢查,這將非常有用。要創建自定義驗證函數,只需使用 @function
指令定義一個新函數,然後使用 @return
指令根據驗證檢查返回一個值。
如果 Sass mixin 或函數中的輸入驗證失敗,則會拋出錯誤,並且 Sass 代碼的編譯將停止。這可以幫助你快速識別和糾正輸入數據中的任何問題,防止最終 CSS 輸出中的 bug 和錯誤。
Sass 提供了 @error
指令,當輸入驗證失敗時,你可以使用此指令來拋出自定義錯誤消息。這對於調試特別有用,因為你可以提供有關錯誤性質以及如何修復錯誤的詳細信息。
是的,Sass 自省函數可用於輸入驗證。這些函數允許你檢查輸入數據的類型、單位和其他屬性,並且可以與 @error
指令結合使用,當輸入不符合預期標準時,可以拋出自定義錯誤消息。
在 Sass mixin 和函數中驗證輸入可用於各種場景。例如,你可能希望確保傳遞到 mixin 中的顏色值是有效的顏色,或者傳遞到函數中的數字具有正確的單位。輸入驗證還可以用於在代碼中強制執行某些約束或規則,例如確保始終提供某個參數,或者某個值在特定範圍內。
是的,你可以使用 mixin-exists()
函數測試 Sass 中是否存在 mixin。如果 mixin 存在,此函數返回 true,否則返回 false。這對於防止代碼中的錯誤非常有用,因為你可以在嘗試包含 mixin 之前檢查其是否存在。
unit()
函數進行輸入驗證? Sass 中的 unit()
函數返回數字的單位。你可以在輸入驗證中使用此函數來檢查數字是否具有正確的單位。例如,你可能希望確保傳遞到 mixin 中的長度值以像素為單位,或者傳遞到函數中的時間值以秒為單位。
在Sass mixin 和函數中驗證輸入的一些最佳實踐包括:始終驗證輸入數據;盡可能使用內置Sass 函數進行驗證;為更複雜的檢查創建自定義驗證函數;使用@error
指令拋出自定義錯誤消息;並徹底測試你的代碼以確保驗證檢查正常工作。
以上是驗證Sass Mixin和功能中的輸入的詳細內容。更多資訊請關注PHP中文網其他相關文章!