Loading...
MiBuena avatar MiBuena 7 Точки

[C#] Как трябва да действа един метод при подаден аргумент null?

Имаме следния код:
 

public string ShortenString(string input)
{
     if (input == null)
     {
          throw new ArgumentException(nameof(input));
     }

     if (input.Length > Constants.MaxLength)
     {
          return input.Substring(0, Constants.MaxLength);
     }

     return input;
}


Както се вижда работата на този метод е да скъси до определена дължина даден стринг, който му е подаден. Въпросът е, че стрингът, който му се подава може да е null - тъй като това поле не е задължително. Въпросът е какво правим ако се подаде null? 

Как е най-правилно -

1. Да оставим метода да хвърля ексепшън, когато се подаде null - както е в момента. Това означава, че трябва да се направи проверка дали подадения аргумент не е null във всички методи, които го викат. - тоест на много места един и същи код.

2. Вторият вариант е да правим проверка в самия метод за null и съответно, ако е null - може да връща празен стринг.

Спомням си това, което ни каза Наков - че един метод или трябва да свърши каквото имто му казва - или да хвърли ексепшън и съм малко раздвоена в случая.

Какъв би бил най-КПК подходът според вас в този случай?

Благодаря.
 

Тагове:
0
C# OOP Advanced 02/12/2017 10:57:54
MiBuena avatar MiBuena 7 Точки

В случая - няма значение дали ще върне празен стринг или null. И по двата начина няма да счупи приложението - за нещата, за които аз го ползвам.

Но примерно някой колега може да реши да ползва този метод да съкращава полета, които не трябва да са null? И ако в такъв случай се подаде null - това да значи, че по-нагоре има грешка в приложението?

Не е ли по-добре тогава да го направим да хвърля грешка, за да каже, че има невалиден input?

П.С. Понеже се оказа, че ще го ползвам и в други класове - направих метода public и май ще го изнеса в отделен Utilities клас StringManipulator.

 

0
02/12/2017 11:03:51
Quake3 avatar Quake3 546 Точки

Ако аз сам си правех тази фунция, щях да си я направя както си искам и да сложа някакъв коментар, какво ще се случи при нулев стринг. Тъй като ми е по-важно апликацията да не гърми в рън тайм, нямаше да ползвам ексепшън, а в някакъв лог, ако е толкова важно да знам, че подаденият стринг е бил нулев. Освен това щях да екстендна Стринг.

0
Quake3 avatar Quake3 546 Точки

Когато слагате минус, хубаво е и да се аргументирате защо го правите.
"Спомням си това, което ни каза Наков - че един метод или трябва да свърши каквото имто му казва - или да хвърли ексепшън".
Има и допълнение с пример след тези негови думи: "Все едно, аз като изпратя празен sms- да ми се ребутне телефона."
https://softuni.bg/trainings/resources/video/2044/video-10-oktomvri-2014-nakov-high-quality-code-sep-2014      12:45
С две думи, както Pilgrimage казва, всичко зависи от конкретната задача. Освен това щях да екстендна Стринг :)

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.