Add comparator annotations.

This commit is contained in:
Oleksii Trekhleb 2018-11-30 07:43:09 +02:00
parent f7ebddc82d
commit 1ecb5b4236

View File

@ -1,12 +1,14 @@
export default class Comparator { export default class Comparator {
/** /**
* @param {function(a: *, b: *)} [compareFunction] * @param {function(a: *, b: *)} [compareFunction] - It may be custom compare function that, let's
* say may compare custom objects together.
*/ */
constructor(compareFunction) { constructor(compareFunction) {
this.compare = compareFunction || Comparator.defaultCompareFunction; this.compare = compareFunction || Comparator.defaultCompareFunction;
} }
/** /**
* Default comparison function. It just assumes that "a" and "b" are strings or numbers.
* @param {(string|number)} a * @param {(string|number)} a
* @param {(string|number)} b * @param {(string|number)} b
* @returns {number} * @returns {number}
@ -19,26 +21,59 @@ export default class Comparator {
return a < b ? -1 : 1; return a < b ? -1 : 1;
} }
/**
* Checks if two variables are equal.
* @param {*} a
* @param {*} b
* @return {boolean}
*/
equal(a, b) { equal(a, b) {
return this.compare(a, b) === 0; return this.compare(a, b) === 0;
} }
/**
* Checks if variable "a" is less than "b".
* @param {*} a
* @param {*} b
* @return {boolean}
*/
lessThan(a, b) { lessThan(a, b) {
return this.compare(a, b) < 0; return this.compare(a, b) < 0;
} }
/**
* Checks if variable "a" is greater than "b".
* @param {*} a
* @param {*} b
* @return {boolean}
*/
greaterThan(a, b) { greaterThan(a, b) {
return this.compare(a, b) > 0; return this.compare(a, b) > 0;
} }
/**
* Checks if variable "a" is less than or equal to "b".
* @param {*} a
* @param {*} b
* @return {boolean}
*/
lessThanOrEqual(a, b) { lessThanOrEqual(a, b) {
return this.lessThan(a, b) || this.equal(a, b); return this.lessThan(a, b) || this.equal(a, b);
} }
/**
* Checks if variable "a" is greater than or equal to "b".
* @param {*} a
* @param {*} b
* @return {boolean}
*/
greaterThanOrEqual(a, b) { greaterThanOrEqual(a, b) {
return this.greaterThan(a, b) || this.equal(a, b); return this.greaterThan(a, b) || this.equal(a, b);
} }
/**
* Reverses the comparison order.
*/
reverse() { reverse() {
const compareOriginal = this.compare; const compareOriginal = this.compare;
this.compare = (a, b) => compareOriginal(b, a); this.compare = (a, b) => compareOriginal(b, a);