5

wpadłem VS kodu 2008 Analysis Tool wobec obiektu utworzonego i otrzymał następującą sugestię ...analizy kodu wraca z sugestią o nie przy użyciu „out” parametry

Ostrzeżenie 147 CA1021: Microsoft.Design : Rozważ, że projekt, który nie wymaga , wymaga, aby parametr "returnValue" był parametrem "out" o wartości .

Uważam, że parametry "na zewnątrz" są raczej użyteczne i nie zdawałem sobie sprawy, że zostały uznane za marne podejście do projektowania. Chciałem wiedzieć, czy ktoś może rzucić trochę światła na to, że otrzymałem to Ostrzeżenie? Jeśli to jest zła praktyka? czemu? i jaka byłaby dobra praktyka?

Doceniam każdą radę.

+0

Czy możemy zobaczyć całą metodę? –

+0

@Lasse: Niestety mój pracodawca nie zezwala mi na umieszczanie zastrzeżonych próbek kodu. Przepraszam. Mogę powiedzieć, że większość metod ma zwrotny typ "bool", który wskazuje na sukces/porażkę, a do zwracania danych używamy parametrów "out". Dzięki za odpowiedź! –

+0

Korzystanie z typu zwrotu, aby wskazać sukces i niepowodzenie, jest jednak w tych dniach złe. – quillbreaker

Odpowiedz

10

Każde ostrzeżenie związane z analizą kodu zawiera powiązaną dokumentację, do której można uzyskać dostęp, wyświetlając ostrzeżenie i naciskając klawisze F1. Możesz również kliknąć element prawym przyciskiem myszy, aby uzyskać pomoc.

W każdym razie tutaj jest documentation that explains that particular warning.

Powiedziałbym, że jest kilka przypadków, w których parametry są nadal dobrym wyborem - szczególnie jeśli chodzi o idiomy do kodowania TryParse, ponieważ jest to tak ugruntowany sposób robienia rzeczy, które większość ludzi ma zrozumieć Jest to jednak ogólnie dostępne, ale istnieją lepsze, bardziej zorientowane obiektowo rozwiązania dla wielu wartości zwracanych.

+0

@ Mark: Dzięki za informacje i link! nie zdawałem sobie sprawy z ciekawości F1, a link wyjaśnia bardzo dobrze, co się dzieje. Doceniam odpowiedź! –

+0

Kodowanie "TryParse'" (przykład: [metoda Int32.TryParse] (https://msdn.microsoft.com/en-us/library/system.int32.tryparse%28v=vs.110%29.aspx)) jest przydatny, ponieważ umożliwia testowanie wartości bez potrzeby potencjalnego obsługiwania wyjątku. Wyrzucony wyjątek jest kosztowny obliczeniowo. – DavidRR

4

Kiedyś przeprowadziłem sobie analizę kodu mojego projektu. Otrzymałem także wiele wnikliwych sugestii, bardzo szybko to wyłączyłem. Wiele z tych sugestii ma charakter religijny, możesz to zrobić w ten czy inny sposób, a to kwestia stylu, a nie złej praktyki.

Do Twojej sytuacji. Jeśli masz tylko jeden parametr zwracany, a następnie zwróć go z powrotem z funkcji.

Jeśli posiadasz kod zwrotny, który zajmuje miejsce zwrotu, rozważ użycie wyjątków, aby poinformować kod błędu dzwoniącego.

Jeśli masz wiele parametrów do zwrócenia, które są blisko ze sobą powiązane, utwórz klasę/strukturę, aby je połączyć i zwróć jako opakowanie.

+4

Nie sądzę, że uczciwe jest odwoływanie się do zasad CA. Ogromna większość z nich opiera się na dokładnej analizie projektu interfejsu API i studiach przypadków dotyczących tego, co rozumie * najbardziej * programista. Książka Framework Design Guidelines (http://www.amazon.com/Framework-Design-Guidelines-Conventions-Libraries/dp/0321246756) dostarcza wiele wglądu w te zasady. Być może nie zgadzasz się z tymi zasadami i na pewno możesz ich nie używać, ale nie są one niczym innym, jak tylko "religijnym". –

+0

@Mark, Problem z wieloma regułami CA polega na tym, że analiza Thompough polega na tym, że interfejsy API PUBLIC, gdy dostawca (Microsoft) nie może uzyskać ponownej kompilacji klucza, powinny się zachowywać. Nie jest tak w przypadku większości normalnych programów napisanych przez programistów. –

2

Wyłączyłem to ostrzeżenie w większości moich projektów. Ponieważ wiem, że kiedy używam parametru out, mam ku temu dobry powód, ponieważ staram się ich całkowicie unikać.

mogę sobie wyobrazić jednak, że podczas pracy z wieloma osobami na projekcie, warto mieć to ostrzeżenie włączone jeśli chcesz zrobić kilka opinii kod ...

3

Wiele ostrzeżeń analizy kodu wydają dla mnie istotne znaczenie dla pisania kodu API, z którego będą korzystać strony trzecie. Twoja reguła z parametrami "out" jest klasycznym przypadkiem: część powodów, aby ich nie używać, ponieważ wielu innych programistów o nich nie wie.

Jeśli nie pasują do tego, co piszesz, wyłącz reguły analizy kodu, które nie odpowiadają Tobie. Osobiście staram się wyłączyć zasady nazewnictwa, przenośności i współdziałania, ponieważ nie są one istotne dla typu kodu, który piszę.

Powiązane problemy