inRange
檢查數值是否在指定范圍內。
語法
typescript
inRange(
value: number,
min: number,
max: number,
inclusive?: boolean
): boolean
參數
value
(number): 要檢查的數字min
(number): 范圍的最小值max
(number): 范圍的最大值inclusive
(boolean, 可選): 是否包含邊界值,默認為 true
返回值
boolean
: 如果數字在范圍內返回 true,否則返回 false
示例
基本用法
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
不包含邊界值
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
處理負數
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
處理小數
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
處理零值
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
處理相同的最小值和最大值
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
處理負范圍
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
處理大數字
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
處理浮點數精度
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
表單驗證
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) // 絕對零度到極高溫度
}
validateAge(25) // true
validateAge(-1) // false
validateAge(150) // false
validatePercentage(50) // true
validatePercentage(0) // true
validatePercentage(100) // true
validatePercentage(101) // false
數組索引檢查
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
顏色值驗證
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
時間驗證
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 (6月有30天)
validateDay(31, 6, 2023) // false
游戲邏輯
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)
}
}
注意事項
- 邊界包含: 默認包含邊界值
- 參數順序: min 和 max 的順序不重要
- 浮點數: 正確處理浮點數精度問題
- 性能: 時間復雜度為 O(1)
與其他函數的區別
inRange
: 檢查數字是否在范圍內clamp
: 將數字限制在范圍內random
: 生成范圍內的隨機數
性能
- 時間復雜度: O(1)
- 空間復雜度: O(1)
- 適用場景: 數值驗證、邊界檢查