承诺的 JavaScript 命名约定? [关闭]

Posted

技术标签:

【中文标题】承诺的 JavaScript 命名约定? [关闭]【英文标题】:JavaScript naming convention for promises? [closed] 【发布时间】:2012-12-25 09:31:12 【问题描述】:

我觉得为具有 promisejavascript 变量制定一个命名约定会很有用。我通常不喜欢或提倡编程语言标准之外的命名约定,但在编程风格中,promise 作为函数参数传递,通常很难一眼看出变量是否持有 promise 或“真实的东西”。

我个人使用过promiseOfFoopFoo,但我觉得前者有点冗长,而后者让我想起了匈牙利语。

有常用的约定吗?

【问题讨论】:

fooPromise 呢? Froomise 呢? 作为我投票结束的补充理由:虽然肯定有惯例,但这个问题很可能会引发很多关于单词和缩写的不同用法的利弊的讨论,以及因此,它没有single 事实答案。但我仍然觉得这是一个很好的问题(也许不是这样),所以我被撕裂了。这就是为什么,+1 也是如此。 @JSteen,我知道关于 SO 格式的问题的问题,但我希望如果不是单一的事实,至少会有一个霸权的答案。不过,感谢您的解释。 这个问题不应该被关闭。问题不是“哪个是最好的约定”,而是“是否有约定”。比如说,一旦 Google JavaScript 样式指南涵盖了这一点,事实的答案就会是“是”。 【参考方案1】:

这更多地取决于你将如何使用它们,不是吗?

如果您的代码如下所示:

var imageLoading = loadImage(url); // returns promise
imageLoading.done(showImage);

// imageLoading.done
// imageLoading.error
// imageLoading.then
// imageLoading.success
// imageLoading.fail
// ... whatever your library supports

那么,我可能会建议将 promise 命名为类似现在时动词...

但是如果你正在构建一个依赖于延迟对象的库

// accepts a promise
var showImage = function (promise) 
    promise.done(function (img)  /* ...... */ );
;

然后,将变量命名为名词并没有什么特别的错误,只要了解哪些方法接受承诺,哪些不接受承诺。

var image = loadImage(url); // returns promise
showImage(image);           // acts on promise

现在您的界面非常干净,您可以编写看起来 100% 程序化的代码。 ...buuuut,您需要知道哪些函数/方法使用了 Promise,哪些使用了对象。

如果您在对象方法中将 Promise 作为回调传递,那么您可以愉快地将它们命名为 promisetweetLoadingdataParsing 或在特定情况的上下文中有意义的任何名称。

对于showImage的定义,我选择的参数是promise,所以如果你正在处理那个函数,或者你需要调试一个东西链,你可以看到第二次你看到它接受了一个 promise 对象。

【讨论】:

+1。我喜欢现在分词的想法(“verb-ing”),尽管它只适用于 action 对承诺的意义很重要的情况(如dataParsing)。承诺通常是关于最终结果(数据)的,所以在这些情况下不是那么多。我也喜欢将函数参数命名为 promise 并从上下文推断含义的想法。好主意,但没有惯例。 @fencliff 承诺通常与最终结果有关,但用于订阅承诺的库 API 都集中在 tweet.done(callback)loading.done(callback) 的操作上,因为延迟值的可用性取决于某种动作(即使只是在一段时间后进行轮询)。这几乎是普遍的。在约定方面,我真的没有看到。写读得好的东西,而不是强制执行新匈牙利语,或采用_00_p 前缀/后缀作为标准约定。 loading.finished();prefix_X.done(); 更容易理解 如果您考虑一下,通过使用现在分词(“加载”、“获取”、“保存”)命名,您实际上是在使用后缀约定(“ing”)而不是前缀约定(“p_”或其他)。没有大的区别,除了可以说是英语使用者的可读性。许多其他语言没有或不利用现在分词,所以我不确定这是否适合全球使用。 @Beetroot-Beetroot 我同意这是一个英语惯例,仅由以英语作为 [1-n]+ 后缀语言的人使用。但是,JavaScript 的关键字(以及其他保留字)也不适合全球化使用,因为对 elsecontinue 的抽象理解也不能真正转化为乌尔都语。我知道你从哪里来,是的,我很迂腐,但是如果我们要废除语言约定,为什么我们不回到汇编中的位算术呢? “promise”、“future”和“deferred”都做类似的事情,都是以英语为基础的范式。 @Norguard,jQuery 和一般的编程语言确实与英语密不可分,但是很明显,母语不是英语的程序员倾向于使用单词来命名他们的变量/从他们的第一语言构建。与编程语言本地人不同,这是我们所有人都可以选择的一个方面。【参考方案2】:

我不知道公共约定,但在我自己的代码中使用了以下内容:

var dfrd:一个 Deferred 对象(我不记得在同一范围内需要两个或更多) var p:一个承诺 var p_foo: 几个命名的 Promises 之一 var promises: 包含 Promises 的数组或普通对象

例外是jqXHR 对象,我将其命名为var jqXHR(同样,我不记得在同一范围内需要两个或更多)。

【讨论】:

太简洁了——虽然有点接近匈牙利表示法 (en.wikipedia.org/wiki/Hungarian_notation)

以上是关于承诺的 JavaScript 命名约定? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

C# GUI 命名约定的最佳实践? [关闭]

单元测试都有哪些流行的命名约定? [关闭]

单元测试都有哪些流行的命名约定? [关闭]

REST API 是不是有任何命名约定准则? [关闭]

SQL Server 索引命名约定 [关闭]

大写缩写的命名约定[关闭]