JavaScript 有代码合约库吗?

发布于 2024-12-22 13:00:13 字数 1536 浏览 0 评论 0原文

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

子栖 2024-12-29 13:00:13

这是一个运行时类型合约库,它采用一些类似于 Haskell 的语法:http://code.google。 com/p/ristretto-js

This is a runtime type contracts library which takes on some Haskell like syntax: http://code.google.com/p/ristretto-js.

一身仙ぐ女味 2024-12-29 13:00:13

这个问题的实现给我留下了深刻的印象:

JavaScript 代码合约库?

示例:

function syncTime(serverTime, now) {
  Verify.value(serverTime).always().isDate();   // Cannot be undefined or null.
  Verify.value(now).whenDefined().isDate();     // Cannot be null, but must be date when defined.

  //Code
}

I was pretty impressed by the implementation put together for this question:

JavaScript Code Contract Libraries?

Example:

function syncTime(serverTime, now) {
  Verify.value(serverTime).always().isDate();   // Cannot be undefined or null.
  Verify.value(now).whenDefined().isDate();     // Cannot be null, but must be date when defined.

  //Code
}
宁愿没拥抱 2024-12-29 13:00:13

为什么不自己创建一个库呢?

使用策略模式,您可以轻松地对特定值运行一系列方法。

这是一个半粗略的例子。这显然需要更多的错误处理和修改,但它为您可以构建的内容提供了一个想法。 http://jsfiddle.net/fBfgz/

var validator = (function() {
    // Available checks
    var types = {
        isNum: function(value) {
            return !isNaN(value);
        },

        isNull: function(value) {
            return value === null;
        }
    };

   return {
       validate: function (data) {

           var i, len, check, ret;
           for (i = 0, len = data.checks.length; i < len; i += 1) {

               if (types.hasOwnProperty(data.checks[i])) {
                   check = types[data.checks[i]]; 
                   ret = check(data.value);
                   alert(ret);
                   if (!ret) {
                       return false;
                   }
               }
           }
           return true;
       }
   };  
}());

validator.validate({ // will return true
    value: 32,
    checks: ['isNum']
});
validator.validate({ // will return false
    value: 32+'a',
    checks: ['isNum']
});

Why not just roll a library yourself?

Using a strategy pattern, you can easily run a series of methods on a specific value.

Here is a semi-crude example. This obviously needs more error handling and modification, but it provides an idea for what you could build. http://jsfiddle.net/fBfgz/

var validator = (function() {
    // Available checks
    var types = {
        isNum: function(value) {
            return !isNaN(value);
        },

        isNull: function(value) {
            return value === null;
        }
    };

   return {
       validate: function (data) {

           var i, len, check, ret;
           for (i = 0, len = data.checks.length; i < len; i += 1) {

               if (types.hasOwnProperty(data.checks[i])) {
                   check = types[data.checks[i]]; 
                   ret = check(data.value);
                   alert(ret);
                   if (!ret) {
                       return false;
                   }
               }
           }
           return true;
       }
   };  
}());

validator.validate({ // will return true
    value: 32,
    checks: ['isNum']
});
validator.validate({ // will return false
    value: 32+'a',
    checks: ['isNum']
});
活雷疯 2024-12-29 13:00:13

我可能会使用 QUnit 进行通用 JavaScript 测试。另请查看 Tim Disney 的 contracts.js,它可能更适合您的用例。

I would probably use QUnit for general purpose javascript testing. Also check out Tim Disney's contracts.js, which may be more specific to your use case.

ペ泪落弦音 2024-12-29 13:00:13

Sweet-contracts 正是您想要的。

Sweet-contracts 是一个需要 sweet.js 的模块,并使用宏将合约添加到语言中。这样你就不必使用现有的(通常是不足/低效的)语言结构来破解你的合约。

sweet.js 允许您创建可以模块化扩展语言的宏。 这篇博文很好地介绍了 sweet 和它的力量的宏。您可以在浏览器此地址中实时试用。

Sweet-contracts does exactly what you want.

Sweet-contracts is a module requiring sweet.js, and uses macros to add contracts right into the language. This way you don't have to hack your contracts using existing (and usually insufficient/inefficient) language constructs.

sweet.js allows you to create macros that can expand the language modularly. This blog post gives a great introduction to sweet and the power of macros. You can try it out live in your browser at this address.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文