coverage   build

Guard Clauses

Ardalis द्वारा उत्कृष्ट C# Guard Clauses 包的 Dart 移植版。

一个简单且可扩展的带有 guard clause 扩展的包。

一个 guard clause 是一个软件模式,通过“快速失败”,提前检查无效输入并在发现任何无效输入时立即失败,从而简化复杂函数。

用法

void processOrder(Order? order)
{
    Guard.against.nullValue(order, 'order');

    // process order here
}

// OR

class Order
{
    String _name;
    int _quantity;
    double _max;
    double _unitPrice;

    Order(String name, int quantity, double max, double unitPrice) {
        _name = Guard.against.nullOrWhiteSpace(name);
        _quantity = Guard.against.negativeOrZero(quantity);
        _max = Guard.against.zero(max);
        _unitPrice = Guard.against.negative(unitPrice);
    }
}

支持的 Guard Clauses

  • Guard.against.invalidInput (如果谓词表达式返回 false,则抛出异常)
  • Guard.against.invalidFormat (如果输入字符串不匹配提供的正则表达式,则抛出异常)
  • Guard.against.negative (如果输入为负数,则抛出异常)
  • Guard.against.negativeOrZero (如果输入为负数或零,则抛出异常)
  • Guard.against.nullValue (如果输入为 null,则抛出异常)
  • Guard.against.nullOrEmpty (如果输入字符串为 null 或空,则抛出异常)
  • Guard.against.nullOrEmptyCollection (如果输入集合为 null 或空,则抛出异常)
  • Guard.against.nullOrWhiteSpace (如果输入字符串为 null、空或空白字符,则抛出异常)
  • Guard.against.nullOrInvalidInput (如果输入为 null,或谓词表达式返回 false,则抛出异常)
  • Guard.against.indexOutOfRange (如果输入不是有效索引,则抛出异常)
  • Guard.against.outOfRangeItems (如果输入集合中的任何值超出了提供的范围,则抛出异常)
  • Guard.against.outOfRange (如果输入集合超出了提供的范围,则抛出异常)
  • Guard.against.zero (如果数字输入为零,则抛出异常)

用自己的 Guard Clauses 进行扩展

要通过创建自己的 guard clauses 来扩展,请为 Guard 创建一个新的扩展类。

extension GuardExtensions on Guard {
  /// Throws an ArgumentError if [input] is 'foo'.
  /// Returns [input] otherwise.
  String foo(String input, {String? name}) {
    if (input.toLowerCase()) {
      throw ArgumentError.value(input, name);
    }

    return input;
  }
}

// Usage
void sumpin(String otherSumpin) {
    Guard.against.foo(otherSumpin);
    ...
}

参考

这些引用以 C# 为中心,但概念适用性很强。

GitHub

查看 Github