inRange
Check whether a number is within a specified range.
Syntax
typescript
inRange(
value: number,
min: number,
max: number,
inclusive?: boolean
): boolean
Parameters
value
(number): The number to checkmin
(number): The minimum value of the rangemax
(number): The maximum value of the rangeinclusive
(boolean, optional): Whether to include the boundary values, default is true
Return Value
boolean
: Returns true if the number is within the range, otherwise returns false
Examples
Basic Usage
typescript
import { inRange } from 'radash'
inRange(5, 1, 10) // true
inRange(1, 1, 10) // true
inRange(10, 1, 10) // true
inRange(0, 1, 10) // false
inRange(11, 1, 10) // false
Excluding Boundary Values
typescript
import { inRange } from 'radash'
inRange(5, 1, 10, false) // true
inRange(1, 1, 10, false) // false
inRange(10, 1, 10, false) // false
inRange(2, 1, 10, false) // true
inRange(9, 1, 10, false) // true
Handling Negative Numbers
typescript
import { inRange } from 'radash'
inRange(-5, -10, 0) // true
inRange(-10, -10, 0) // true
inRange(0, -10, 0) // true
inRange(-11, -10, 0) // false
inRange(1, -10, 0) // false
Handling Decimals
typescript
import { inRange } from 'radash'
inRange(3.5, 1, 5) // true
inRange(1.0, 1, 5) // true
inRange(5.0, 1, 5) // true
inRange(0.5, 1, 5) // false
inRange(5.5, 1, 5) // false
Handling Zero
typescript
import { inRange } from 'radash'
inRange(0, 0, 10) // true
inRange(0, -5, 5) // true
inRange(0, 1, 10) // false
inRange(0, -10, -1) // false
Handling Equal Min and Max
typescript
import { inRange } from 'radash'
inRange(5, 5, 5) // true
inRange(5, 5, 5, false) // false
inRange(4, 5, 5) // false
inRange(6, 5, 5) // false
Handling Negative Ranges
typescript
import { inRange } from 'radash'
inRange(-3, -5, -1) // true
inRange(-5, -5, -1) // true
inRange(-1, -5, -1) // true
inRange(-6, -5, -1) // false
inRange(0, -5, -1) // false
Handling Large Numbers
typescript
import { inRange } from 'radash'
inRange(1000000, 0, 2000000) // true
inRange(0, 0, 2000000) // true
inRange(2000000, 0, 2000000) // true
inRange(-1, 0, 2000000) // false
inRange(2000001, 0, 2000000) // false
Handling Floating Point Precision
typescript
import { inRange } from 'radash'
inRange(0.1 + 0.2, 0.3, 0.4) // true (0.30000000000000004)
inRange(0.3, 0.3, 0.4) // true
inRange(0.4, 0.3, 0.4) // true
inRange(0.2, 0.3, 0.4) // false
inRange(0.5, 0.3, 0.4) // false
Form Validation
typescript
import { inRange } from 'radash'
function validateAge(age: number): boolean {
return inRange(age, 0, 120)
}
function validatePercentage(value: number): boolean {
return inRange(value, 0, 100)
}
function validateTemperature(temp: number): boolean {
return inRange(temp, -273.15, 1000000) // Absolute zero to extremely high temperature
}
validateAge(25) // true
validateAge(-1) // false
validateAge(150) // false
validatePercentage(50) // true
validatePercentage(0) // true
validatePercentage(100) // true
validatePercentage(101) // false
Array Index Checking
typescript
import { inRange } from 'radash'
function safeArrayAccess<T>(array: T[], index: number): T | undefined {
if (inRange(index, 0, array.length - 1)) {
return array[index]
}
return undefined
}
const arr = ['a', 'b', 'c', 'd']
safeArrayAccess(arr, 0) // 'a'
safeArrayAccess(arr, 2) // 'c'
safeArrayAccess(arr, 3) // 'd'
safeArrayAccess(arr, -1) // undefined
safeArrayAccess(arr, 4) // undefined
Color Value Validation
typescript
import { inRange } from 'radash'
function validateRGB(r: number, g: number, b: number): boolean {
return inRange(r, 0, 255) &&
inRange(g, 0, 255) &&
inRange(b, 0, 255)
}
function validateAlpha(alpha: number): boolean {
return inRange(alpha, 0, 1)
}
validateRGB(255, 128, 0) // true
validateRGB(256, 128, 0) // false
validateRGB(255, -1, 0) // false
validateAlpha(0.5) // true
validateAlpha(0) // true
validateAlpha(1) // true
validateAlpha(1.5) // false
Time Validation
typescript
import { inRange } from 'radash'
function validateHour(hour: number): boolean {
return inRange(hour, 0, 23)
}
function validateMinute(minute: number): boolean {
return inRange(minute, 0, 59)
}
function validateSecond(second: number): boolean {
return inRange(second, 0, 59)
}
function validateMonth(month: number): boolean {
return inRange(month, 1, 12)
}
function validateDay(day: number, month: number, year: number): boolean {
const daysInMonth = new Date(year, month, 0).getDate()
return inRange(day, 1, daysInMonth)
}
validateHour(12) // true
validateHour(24) // false
validateMonth(6) // true
validateMonth(13) // false
validateDay(15, 6, 2023) // true (June has 30 days)
validateDay(31, 6, 2023) // false
Game Logic
typescript
import { inRange } from 'radash'
class Game {
private playerHealth = 100
private playerPosition = { x: 0, y: 0 }
private gameBounds = { width: 800, height: 600 }
takeDamage(damage: number): void {
if (inRange(damage, 0, 100)) {
this.playerHealth = Math.max(0, this.playerHealth - damage)
}
}
movePlayer(dx: number, dy: number): boolean {
const newX = this.playerPosition.x + dx
const newY = this.playerPosition.y + dy
if (inRange(newX, 0, this.gameBounds.width) &&
inRange(newY, 0, this.gameBounds.height)) {
this.playerPosition.x = newX
this.playerPosition.y = newY
return true
}
return false
}
isAlive(): boolean {
return inRange(this.playerHealth, 1, 100)
}
}
Notes
- Boundary Inclusion: Boundaries are included by default
- Parameter Order: The order of min and max does not matter
- Floating Point Numbers: Handles floating point precision issues correctly
- Performance: Time complexity is O(1)
Differences from Other Functions
inRange
: Checks if a number is within a rangeclamp
: Restricts a number within a rangerandom
: Generates a random number within a range
Performance
- Time Complexity: O(1)
- Space Complexity: O(1)
- Applicable Scenarios: Numeric validation, boundary checking