【问题标题】:What does $ sign at the end of function name indicate?函数名末尾的 $ 符号表示什么?
【发布时间】:2017-08-22 08:30:51
【问题描述】:

这是我正在审查的代码...

import { Observable } from 'rxjs/Rx';
// reducer
import { playerRegister, PlayerState } from './player';
export function getPlayer$ (state$: Observable<MyAppState>): Observable<PlayerState> {
  return state$.select(state => state.player);
};

【问题讨论】:

  • 有人用它来表示函数是异步的。
  • $ 只是一个完全没有意义的字符
  • @robby-cornelissen 谢谢,你可以移过来回答。
  • @JaromandaX 我认为说“$ 只是一个没有意义的角色”并不是特别有用,因为 OP 显然已经看到或怀疑存在一些约定,即$ 用于指示变量的某些质量。因此,问题“[它]表明了什么?”。类似的问题可能是“Factory 后缀在类名上表示什么?”同样无益的回应是“字符Factory 没有特殊意义”。

标签: javascript typescript ecmascript-6 rxjs


【解决方案1】:

在语法上,美元 ($) 字符在 JavaScript identifiers 中没有特殊含义。

然而,它有时按惯例用于表示变量包含 Observable 或函数将返回 Observable

【讨论】:

  • 从未见过。这个约定是否在任何地方都有规定,流行的图书馆是否使用它?
  • @Bergi 我已经看过几次了。据我所知,不限于特定的库或框架,而是进一步研究它。
  • 我不想分叉,但 Observable 不是函数,它们内部或附加到它们的逻辑不一定是异步执行的。
  • @Bergi 提到了对 Cycle.js 的引用here
  • @MattBurnell 你是对的。然而,我已经看到它被用于 observables 以及 Promise 和其他类型的异步函数。将更新我的答案。
【解决方案2】:

这是一个名为Finnish Notation 的代码约定,显然是由于developer 的起源,即attributed 第一次使用它。用于表示变量或函数的Observable类型。

这个想法是 Observable 通常表示多个 Values 的流,而复数的变量/函数名称会表明这一点。为了不与数组变量(通常也是复数形式)混淆,使用$ 字符而不是s。读取变量时,您会将$ 读取为s

示例

在命名数组时,您很可能会使用单个元素名称的正确复数形式,例如:

const pets = ['cat', 'dog', 'turtle']

虽然,如果您有一个发出这三个值的 observable,您会使用:

const pet$ = from(['cat', 'dog', 'turtle']) // read: pets

是否要使用它取决于您和您的团队。我想到目前为止还没有明确的共识,因此您可以对此进行长期而有意义的争论;-)。已有tslint rules 可供您执行您的决定。

【讨论】:

  • 感谢您不仅解释了如何使用它,还解释了为什么,以及它叫什么。您的彻底性使这个答案变得更有用,并使这个概念更容易记住!
【解决方案3】:

我不确定它是否比在 RxJS 社区中更广泛地使用,但在这个社区中,它通常用于指示变量是流(即 Observable)或函数返回这样的流。

【讨论】:

    【解决方案4】:

    对于一个函数,这意味着它返回一个可观察对象。

    对于一个变量,这意味着它是一个可观察的。

    这种表示法在 Angular 项目中广泛使用,我发现快速查看它是可观察值而不是实际值非常有用。

    【讨论】: