Dyskutowaliśmy z naszymi współpracownikami, co to znaczy, jeśli nazwa metody zaczyna się od „Try”.
Były następujące opinie:
- Użyj „Spróbuj”, gdy metoda może zwrócić wartość pustą.
- Użyj „Spróbuj”, gdy metoda nie zgłosi wyjątku.
Jaka jest oficjalna definicja? Co mówi „Try” w nazwie metody? Czy istnieją jakieś oficjalne wytyczne na ten temat?
c#
naming-conventions
ms007
źródło
źródło
Odpowiedzi:
Jest to znane jako wzorzec TryParse i zostało udokumentowane przez Microsoft. W oficjalnych Wyjątki i wydajności stronę MSDN mówi :
Zatem jeśli masz kod, dla którego zwykły przypadek użycia oznaczałby, że może zgłosić wyjątek (taki jak parsowanie liczby całkowitej ), wzorzec TryParse ma sens.
źródło
(Poprawiony) Istnieje oficjalna wytyczna, jak sugerował Erik.
Kiedy widzę
TrySomething
metodę, zakładam, żebool
Something
metoda, która pozwala mi samodzielnie obsłużyć każdy wyjątek. (edycja sugerowana przez Jesse Webb)źródło
TryFoo
metoda, będzie podobnaFoo
metoda, która pozwoli mi poradzić sobie z wszelkimi `` wyjątkami ''. Podpisy tych metod będą prawdopodobnie różne, więc ich zastosowania nie będą zamienne bez innych zmian w kodzie.Myślę, że powinieneś użyć,
try
kiedy chcesz kontynuować. Nie ma znaczenia, że metoda zwraca pewną wartość, czy nie.Przypadek 1: jeśli zwróci się dobrze, możesz postępować w jakiś sposób.
Przypadek 2: jeśli nie zwróci: nadal jest w porządku; możesz postępować w inny sposób.
A jeśli oczekujesz pewnej wartości jako wyniku tej metody, użyj
out
parametru.Przykład
źródło
Musisz użyć „Try” w nazwie metody, jeśli chcesz zamanifestować fakt, że wywołanie metody może dać niepoprawny wynik. Nawiasem mówiąc, zgodnie ze standardem .NET nie jest to funkcja, która wywołuje wyjątek, ale funkcja, która zwraca część
VALID
lubNON_VALID
, z perspektywy programu, wartość.Na koniec chodzi o konwencję nazewnictwa, którą zdecydujesz się zastosować w swojej grupie.
źródło
Pamiętaj o dołączeniu do
try
nazwy metody, jeśli:bool TrySomething(input, out yourReturn)
Zasadniczo, jeśli użyjemy
try
-metod, otrzymamy tylko wynik boolowski.Poniższy kod nie zgłosi żadnych wyjątków:
Podczas gdy ten kod może (iw tym przypadku będzie) zgłaszać wyjątki:
Korzystanie z metod Try jest bezpieczniejszym i bardziej defensywnym sposobem kodowania. Fragment kodu nr 2 wymaga większej wydajności, jeśli nie jest liczbą całkowitą.
źródło
int number = int.Parse(input);
jeśli chcesz, aby był bardziej znaczący w tym kontekście.int number;
deklaracji przed blokiem try inumber = ...
przypisaniem.TryLoadFile(path, out file)
woah, poza pamięcią RAM. Osoba dzwoniąca nie spodziewałaby się więc żadnych błędów w przypadku złej ścieżki lub odmowy dostępu, ale wyjątek dla dziwniejszych rzeczy, które również mogłyby pójść nie tak. I udokumentuj to.Wujek Bob podaje poniższy przykład w swojej książce Clean Code . Ilekroć spodziewamy się zgłoszenia wyjątku, możemy użyć
Try
prefiksu nazwy metody:A następnie (dostosowany):
tryToShutDown
Metoda nie ma żadnej obsługi błędów, bo to w gestiisendShutDown
metody.The
TryParse
Wzór Microsoft narusza czystego kodu wytyczna, która mówi, że powinniśmy unikać parametry wyjściowe.Jeśli nie opracowujemy nowej wersji C #, nie musimy trzymać się wszystkich wytycznych Microsoft. Czasami nie są najlepsze.
źródło