【问题标题】:JavaScript equivalent to Guava's Preconditions?JavaScript 等价于 Guava 的先决条件?
【发布时间】:2013-09-13 11:49:16
【问题描述】:

在 Java 中,我使用 Google Guava 检查我的preconditions

public Port getPublishedPort(Port port) {
    checkArgument(port.isPublishedPort(), "Given port %s is not a published port.", port);

在 JavaScript 中是否有与 this 等价的功能?

【问题讨论】:

    标签: javascript guava


    【解决方案1】:

    Node.js Preconditions Library 被宣传为具有用于前置条件检查的类 Guava API。

    在 Node.js 中支持 Guava,例如 Precondition 错误检查

    new InstanceValidator(port).checkArgument(
            "publishedPort", "Given port %s is not a published port.", [port]);
    

    【讨论】:

    • 检查相等的语法是什么?
    • 疯狂的延迟响应,但我只使用 .shouldBeTruthy
    • 我没有使用过这个库,但是我根据它的文档的理解添加了一个使用示例。
    【解决方案2】:

    我创作了Requirements.js。用法如下所示:

    import {requireThat} from "@cowwoc/requirements/es6/node/DefaultRequirements.js"
    
    class Player
    {
      constructor(name, age)
      {
        requireThat(name, "name").isNotNull().asString().length().isBetween(1, 30);
        requireThat(age, "age").asNumber().isBetween(18, 30);
      }
    }
    

    主要关注的是可读性。输出如下所示:

    RangeError: age must be in range [18, 30).
    Actual: 15
    

    欢迎您的反馈。

    【讨论】:

    • 看起来很棒!没有“asString”和“length”方法会更好。 requireThat(name).as("name"//to name in errors (optional - default: Object)) .isString() .isNotNull() .isLenghtBetween(1, 30) .isRegex(etc)
    【解决方案3】:

    不,但你可以自己写:

    var Preconditions = {
      checkArgument: function(condition, message) {
        if (!condition) {
          throw Error('IllegalArgumentException: ' + (message || ''));
        }
      }
    }
    

    在你的业务逻辑中

    function getPublishedPort(port) {
      Preconditions.checkArgument(port.isPublishedPort(), 'Given port is not a published port.');
      // ... Business logic ...
    }
    

    虽然我猜它不能为你做惰性评估的格式化。

    【讨论】:

      【解决方案4】:

      我最近为 JavaScript 编写了一个名为 condicio 的 Preconditions 版本。它与 Guava 的先决条件非常相似,但为 JavaScript 添加了一些功能。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-04-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-15
        • 2010-09-29
        • 2012-11-18
        相关资源
        最近更新 更多