Czy dostosować się do dokumentacji języka, wytwarzając bibliotekę?

1

W mojej bibliotece T-Regx, kiedy chce się podmienić tylko n elementów, można użyć metody only(n), np only(3). Jeśli przekaże się ujemną wartośc, libka rzuca \InvalidArgumentException, który jest wbudowany w język.

Tylko teraz czytam w dokumentacji że:

The InvalidArgumentException class ¶
(PHP 5 >= 5.1.0, PHP 7, PHP 8)
Introduction ¶
Exception thrown if an argument is not of the expected type.

I teraz taki problem, bo -1 to nie jest niepoprawny typ tej funkcji, tylko ma niepoprawną wartość. PHP sugeruje rzucenie wyjątku LengthException, OutOfRangeException, UnderflowException lub OutOfBoundException które są rzucane dla poprawnych typów, ale niepoprawnych wartości.

Więc pojawia się pytanie, którego użyć. Z jednej strony InvalidArgumentException "brzmi" lepiej, czyli technicznie użycie niezgodne z rekomendacją języka.

Jak myślicie?

3

IMO InvalidArgumentException jest prawidłowe - co najwyżej dokumentacja opisuje klasę niedokładnie, ponieważ jej rzeczywiste zastosowania wskazują na użycia zarówno w kontekście "zły typ":

... jak i w kontekście "zła wartość":

Fwiw, istnieje również https://www.php.net/manual/en/class.valueerror.php.

0
Patryk27 napisał(a):

Fwiw, istnieje również https://www.php.net/manual/en/class.valueerror.php.

Wygląda jak żywcem zerżnięte z Pythona, ValueError.

Poza tym jest tylko od PHP8, a T-Regx wspiera 7.1+

0
TomRiddle napisał(a):

I teraz taki problem, bo -1 to nie jest niepoprawny typ tej funkcji, tylko ma niepoprawną wartość.

Czy w PHP typ to zbiór wartości?

1
Silv napisał(a):
TomRiddle napisał(a):

I teraz taki problem, bo -1 to nie jest niepoprawny typ tej funkcji, tylko ma niepoprawną wartość.

Czy w PHP typ to zbiór wartości?

Raczej nie.

0

No skoro wartość spoza dozwolonego zakresu, to ewidentnie OutOfRangeException.

4
TomRiddle napisał(a):

I teraz taki problem, bo -1 to nie jest niepoprawny typ tej funkcji, tylko ma niepoprawną wartość.

Z opisu wynika, że to oczywiście niepoprawny typ. Twoja funkcja określona jest na liczbach naturalnych (a pewnie nawet na mniejszym zbiorze), a ktoś podał całkowitą.
Zły typ.

2
jarekr000000 napisał(a):

Z opisu wynika, że to oczywiście niepoprawny typ. Twoja funkcja określona jest na liczbach naturalnych (a pewnie nawet na mniejszym zbiorze), a ktoś podał całkowitą.
Zły typ.

To już zaczyna się filozoficzne pytanie gdzie zaczyna się typ. Teoretycznie można zdefiniować sobie typ który posiada tylko wartości naturalne z zakresu [1 .. 12], chociaż mało języków daje takie możliwości. Dlatego w naszych głowach typ to np wartości [0 .. 255] lub [-128 .. 127]

3
KamilAdam napisał(a):

To już zaczyna się filozoficzne pytanie gdzie zaczyna się typ. Teoretycznie można zdefiniować sobie typ który posiada tylko wartości naturalne z zakresu [1 .. 12], chociaż mało języków daje takie możliwości.

Ale tu mówimy o PHP, a w PHP, przynajmniej na etapie kompilacji - ogranicze Cię wyobraźnia tylko.

1 użytkowników online, w tym zalogowanych: 0, gości: 1