What does $ sign at the end of function name indicate?
Here is the code I'm reviewing...
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);
};
Solution 1:
Syntactically, the dollar ($
) character has no special meaning in JavaScript identifiers.
It is, however, sometimes used by convention to indicate that a variable holds an Observable
or that a function will return an Observable
.
Solution 2:
This is a code convention named Finnish Notation, apparently due to the origin of the developer that is attributed for first using it. It's used to indicate the Observable
type of a variable or function.
The idea is that an Observable usually represents a stream of multiple Values and a pluralized variable / function name would indicate this. To not be confused with array variables (which are usually also pluralized), the $
character is used instead of the s
. When reading the variable, you'd read the $
as an s
.
Example
When naming an array, you'll most likely use the proper plural form of a single element's name, as in:
const pets = ['cat', 'dog', 'turtle']
While, if you had an observable that emitted those three values, you'd use:
const pet$ = from(['cat', 'dog', 'turtle']) // read: pets
It's up to you and your team whether you want to use it. I guess there is no explicit consensus as of now, so you can have a long and meaningful argument about it ;-). There are already tslint rules available that allow you to enforce your decision.
Solution 3:
I'm not sure if it's used more widely than within the RxJS community, but within this community it's commonly used to indicate that a variable is a stream (i.e. an Observable) or that a function returns such a stream.
Solution 4:
For a function it means it returns an observable.
For a variable it means it is an observable.
This notation is widely used in Angular projects and I find it very useful to quickly see that it is an observable and not the actual value.