老计时器如何最好地管理Javascript中的类型安全

How best for an old timer to manage type safety in Javascript

本文关键字:Javascript 类型安全 管理 计时器 何最好      更新时间:2023-09-26

我已经编写了几十年的C/C++/C#,并且根据Web项目的需要使用JavaScript,但希望扩展它并使用Canvas和JavaScript进行更深入的开发。

我担心的是你有多容易犯错误,比如setinterval()而不是setInterval()。 我正在使用VisualStudio,并且有Telerik的JustCode插件可以进行一些静态分析,但是它没有检查太多内容。

我还担心调用不存在的对象方法或属性。 我理解为什么这些东西赋予语言和开发人员更大的灵活性,但我如何最好地保护自己免受这种灵活性的意外后果

我也在很长一段时间内与

JavaScript的动态类型特性作斗争。 当我终于与它和平相处时,结果证明是相当自由的。 这是对我有用的口头禅:

程序正确性是最重要的。 如果我相信我的程序表现出正确的行为,则我的类型是正确的,或者任何现有的键入错误都不会影响程序行为。

这种思维的转变更加强调测试——这是一件好事。 如果你的测试写得很好,而且很全面,那么就会发现类型错误。

我也倾向于在我的JavaScript编码中使用更多的函数范式:如果你没有改变状态,强类型就没有那么有意义。

当然,如果你真的觉得强类型很重要,总有 TypeScript,它直接编译到 JavaScript,并且从各方面来看,它是一种优秀的语言。

好的设计就是答案。仅仅因为它是Javascript并且给了你很大的自由,并不意味着你到目前为止使用的原则就不那么有效了。通过接口(甚至更好的是,通过合同)进行设计,制作类图,将笔放在纸上等。请注意Javascript自己的面向对象品牌,了解它和相关模式(SO有很多关于它们的问题),并热切地等待ES6 Harmony。

如果你想要一个IDE,或者至少是一个环境,以可读和易于使用的方式告诉你出了什么问题,我建议你简单地使用你最喜欢的浏览器的控制台(你最喜欢的浏览器应该是FF或Chrome)。Firefox + Firebug特别好,是许多Web开发人员的最爱。控制台,就像在 Python 中一样,允许您测试代码片段并非常快速地解决命名错误。

当我大学毕业时,我是一个很有前途的年轻小伙子,并且确信我找到一些工作不会有问题。过了一会儿...砰!世界经济危机袭来。所以我不得不接受一些廉价而丑陋的工作,在我厌倦了他们之后,我开始寻找更好的东西,我冒着一切风险。你可能想知道为什么我在一个半科学的网站上告诉你这一切。我告诉你,因为通过我的故事,你会明白我为什么以我的方式回答。经过 3 年寻找自己的位置并不断培训和教育自己,我收到了一小群程序员的邀请,他们使用了一些对我来说非常陌生的技术。我加入了他们,我必须学习很多东西:.NET framework,Visual Basic,Javascript,jQuery,CSS,Telerik,很多库。我知道这是我稳定自己地位的机会,我是一个非常训练有素的学习者(我一直在学习,但在不同的领域),所以我花了两周的时间工作 16 小时而不是 8 小时,最后我是团队的建设性成员,对新学习的语言和技术仍然有点生疏, 但我的结果相当不错。不久之后,我习惯了那里使用的所有东西,没有任何问题。

问题是我学习Javascript的同时也学习了很多其他东西,同时工作,任务的时间表很紧。就像你一样,我不喜欢Javascript没有类型。这么多年过去了,即使是现在,我也不喜欢它。但是我没有时间让它对我来说更舒服,现在我已经习惯了它,以至于我懒得创造一些对我有帮助的东西,而这个东西也不再对我有帮助。

如果你不想以艰难的方式习惯它,我相信这样的事情会对你有所帮助:

function StrongType(weakValue) {
    //int
    this.i = function() {
        return parseInt(weakValue);
    };
    //float
    this.f = function() {
        return parseFloat(weakValue);
    };
    //string
    this.s = function() {
        return weakValue + "";
    };
    //boolean
    this.b = function() {
        return !!weakValue;
    };
    //change
    this.c = function(newValue) {
        weakValue = newValue;
    };
    //natural
    this.n = function() {
        return weakValue;
    };
}

这将帮助您确保始终知道正在使用的类型。函数名称:

您可以为自己创建一个关于如何键入名称的策略,并将其用于所有函数和变量。如果您正在使用某个函数并且它的名称不适合您,那么您可以执行以下操作:

function MyNameHelpers() {
    this.setTimeOut = function(callback, interval) {
        return setTimeout(callback, interval);
    };
}

另外,假设你有一个foo对象,你想使用它的柱成员,可能带有参数:

function MemberUser() {
    this.useMember = function(owner, member, error, errorParams) {
        if (!!owner) {
            return owner[member];
        } else {
            //error is a function to handle the case when owner is falsy
            return error(errorParams);
        }
    };
    this.callMethod = function(owner, member, params, error, errorParams) {
        if (!!owner) {
            return owner[member](params);
        } else {
            //error is a function to handle the case when owner is falsy
            return error(errorParams);
        }
    };
}

上面的代码只是插图,我没有测试/使用它们,也许需要添加一些东西等等,但你明白了。你要么像我一样习惯Javascript,要么创建一个库来防止你犯错误。这是您的选择。