老计时器如何最好地管理Javascript中的类型安全
How best for an old timer to manage type safety in Javascript
我已经编写了几十年的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,要么创建一个库来防止你犯错误。这是您的选择。
- JavaScript类型的、警报和应用
- 在JavaScript类型的函数中避免self-this
- Javascript 类型未定义和 void 之间的区别
- 在Resharper中禁用javascript类型强制警告
- 如何解析 JavaScript 类型 html
- Typeahead的Javascript类型返回未定义
- JS和iOS之间的类型安全
- 在Ruby Slim文件中设置Javascript类型
- 将参数传递到JavaScript的安全方式,无需服务器端脚本
- 寻找Javascript类型数组仿真库
- JavaScript 类型强制首选项
- TypeScript 构造函数类型安全
- JavaScript 类型数组 - 不同的视图 - 2.
- JavaScript 类型数组 - 不同的视图
- JavaScript 类型错误
- 如何处理未定义属性的未定义属性 javascript 类型错误
- JavaScript:由于安全错误,无法获取图像数据
- 老计时器如何最好地管理Javascript中的类型安全
- JavaScript中是否有类型安全的比较操作符等价物
- javascript中的类型安全,或者如何避免很难检测到的类型相关错误