2009-02-05 18 views
23

Uważam, że często kończę pisanie funkcji, którą zawsze nazywam "clamp()", która jest rodzajem kombinacji min() i max(). Czy istnieje standardowa "kanoniczna" nazwa tej funkcji?Czy istnieje "kanoniczna" nazwa funkcji łączącej min() i max()?

To zawsze wygląda mniej więcej tak:

function clamp($val, $lower, $upper) 
{ 
    if ($val < $lower) 
    return $lower; 
    else if ($val > $upper) 
    return $upper; 
    else 
    return $val; 
} 

lub po prostu za pomocą wbudowanego w min() i max() funkcji:

function clamp($val, $lower, $upper) 
{ 
    return max($lower, min($upper, $val)); 
} 

Wariacje istnieć: Można również sprawdzić nieprawidłowych danych wejściowych, gdzie lower > upper, i albo wyrzuć wyjątek, albo odwróć dane wejściowe. Lub możesz zignorować kolejność wejść i nazwać ją funkcją mediany-trzech, ale to może być mylące.

+0

Unikałbym podawania parametrów o takich samych nazwach jak używane funkcje, szczególnie, że nie są używane w pasujących parach (tj. Min $ jest używane z max() i na odwrót). Być może zamiast tego dolny i dolny. –

+0

@BenBlank: dobry pomysł. edytował pytanie – Kip

+0

Używam nazwy InRange(), ale mój komentarz nie jest o nazwie, chodzi o porządkowanie parametrów. Łatwiej mi odczytać: InRange (min, value, max) than (value, min, max) –

Odpowiedz

35

zacisk to dobra nazwa.

Uczyńmy to standardem.

+2

Wydaje się być standardem (przynajmniej w grafice) już: http://en.wikipedia.org/wiki/Clamping_%28graphics%29 –

+0

Hmm .. może wybrałem "zacisk" w pewnym momencie i zapomniałem gdzie go mam od .. – Kip

+0

Coś wspaniałego imienia po tym, jak zrozumiałem, co to było. Plus jeden do standardu. – Rodrigo

0

bym po prostu pójść na nazwę funkcji „rangeCheck”

+1

not good, rangeCheck brzmi jak to CHECKS. Ale to, co robi, to ZMIENIĆ wartości w zakresie. – Thorsten79

5

W niektórych językach masz limitu funkcja

num = limitu (val, min, max)

0

mediana

Ponieważ uogólnia do większej wartości.

+1

Nie chodzi o znalezienie informacji statystycznych o zestawie próbek. Chodzi o zmuszenie liczby do określonego zakresu. – MSN

+2

@MSN: technicznie mediana (val, min, max) zrobi to samo co zacisk (val, min, max). plus, kolejność parametrów do mediany() nie miałaby znaczenia. ale to nie jest od razu oczywiste (przynajmniej nie dla mnie). – Kip

+0

Median ma tę zaletę, że jest samoprzylepny. Odzyskasz środkowy element. Na przykład, "zacisk" rzuci wyjątek, jeśli mój min jest mniej niż mój max? W takim przypadku, który argument jest min? Pierwszy czy drugi? Te szczegóły mogą się zmieniać z miejsca na miejsce. –

1

Używamy tutaj pin. Właściwie używamy pin dla prostych zakresów i clamp dla innych rzeczy.

0

Co z związanym?

bound(min, val, max) 

Lub constrain?

constrain(val, min, max) 
0

Co myślisz o rzeczach jak InRangeClosestTo (Number, RangeLowerBound, RangeUpperBound) lub ClosestInRange (numer, LowerBoundOfRange, UpperBoundOfRange)? Chodzi mi o "Dostarcz mi element zakresu najbliżej liczby", co, jak mam nadzieję, jest oczywiste.

Koncepcja jest bardziej precyzyjny niż zacisk, że tak ma dwie strony, ale nie wiele więcej albo wartość ograniczenia lub związanej, że może nie chcieć, aby powrócić niczego, jeśli liczba nie mieści się w zakresie,

Dla mnie oni są jaśniejsze niż reszta, którą widziałem; chociaż zrozumienie ich może zająć kilka sekund, wystarczy podać uzasadnienie nazwy, a co najwyżej krótki komentarz do potwierdzenia; i jest miło, gdy widzisz, jak precyzyjna jest (jest precyzyjna, prawda?).

Możesz mieć tylko wątpliwości, czy zakres jest włączony, czy nie, ale myślę, że większość ludzi prawidłowo założyłaby, że jest on włączony. Alternatywnie możesz użyć InInclRangeClosestTo i InExclRangeClosestTo, ale nie widzę wielu zastosowań dla wyłącznych zakresów.

Oczywiście powinieneś mieć IDE uzupełniające automatycznie, jeśli chcesz z nich korzystać.