Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
public Category Get(ArrayList array, int id) {
Category result = null;
foreach(object o in array)
{
Category current = o as Category;
if(current.ID == id) {
result = current;
break;
}
}
return result;
}
as (через ass, хе-хе :). Здесь лучше делать явное:
public Category Get(ArrayList array, int id)
{
foreach(object o in array)
{
Category result = (Category)o;
if(result.ID == id)
return result;
}
return null;
}
o as Category вернет null. И вместо более или менее понятного InvalidCastException (здесь он может появиться только по упомянутой причине) вы получите NullReferenceException, который в данном случае может произойти аж в трех местах…List<Category>) — тогда и работать быстрее будет, и проблемы с приведением типов исчезнут… А если нет — не поленитесь, напишите какой-нибудь СategoryList: IList :)Полиморфизм говорит нам делить свойства класса на методы
>>> def getValue(data):
... if isWrongValue(data):
... return 0
... return parseValue(data)
...
>>> def isWrongValue(data):
... return data == 'wrong'
...
>>> def parseValue(data):
... return data.count('h')
...
>>> getValue('wrong')
0
>>> getValue('hello')
1
>>> def anotherGetValue(data):
... value = 0
... if isGoodValue(data):
... value = parseValue(data)
... return value
...
>>> def isGoodValue(data):
... return data != 'wrong'
...
>>> anotherGetValue('wrong')
0
>>> anotherGetValue('hello')
1
>>> def yetAnotherGetValue(data):
... return isGoodValue(data) and parseValue(data) or 0
...
>>> yetAnotherGetValue('wrong')
0
>>> yetAnotherGetValue('hello')
1
IDashboardExtension dashboardExtension = ApplicationServer.GetExtension<IDashboardExtension>();
ReportDefinitionSpecificationDocument specificationDocument =
ApplicationServer.GetBusinessObject<ReportDefinitionSpecificationDocument>(e.DocumentMetadata.ID);
var dashboardExtension = ApplicationServer.GetExtension<IDashboardExtension>();
var specificationDocument =
ApplicationServer.GetBusinessObject<ReportDefinitionSpecificationDocument>(e.DocumentMetadata.ID);
* сложность отладки такого кода, не всегда очевидно когда произошёл возврат из функции, к примеру мы имеем несколько return и никогда точно не можем сказать какой из них был вызван;
* проблемы с сопровождением и изменением. При взгляде на код, особенно, если он большой не всегда заметны существующие точки выхода.
как величина проекта влияет на размеры кода?Прямо-пропорционально, за исключением индусов которым платят за количество строк.
при чем тут времена Декйстры и отлаживание? я говорил про наше время
при том что первый приведенный аргумент был именно о процессе отладки. или это ваши современные аргументы?
про 15 строчек можно спорить бесконечно, тут я бы все оставил на усмотрение автора кода, все зависит от языка и принятых в компании соглашений
какая связь между языком на котором вы пишите и размером логических блоков? или вы хотите сказать что на php это простительно? вы видели компании в которых по стандарту принято группировать логические блоки на 50 и более строк?
exp1 = doSomthing1(); if (exp1) return 0; exp2 = doSomthing2(); return exp2 ? exp2 : 0;
exp1 = doSomthing1();
if (exp1) retval = 0;
else
{
exp2 = doSomthing2();
retval = exp2 ? exp2 : 0;
}
return retval;
double getPayAmount() {Чуть изменил форматирование, но не суть.
double result;
if (_isDead)
result = deadAmount();
else if (_isSeparated)
result = separatedAmount();
else if (_isRetired)
result = retiredAmount();
else
result = normalPayAmount();
return result;
}
* This source code was highlighted with Source Code Highlighter.
void* func(char* a)
{
if (a==NULL)
return NULL;
void* result = NULL;
/* function body */
return result;
}
public void func(ClassA a)
{
if(a == null)
throw new NullPointerException(...)
....
}
addComment
comment->Validate()— там же проверки ввода мейл и чего еще пожелаете.
post = new Post(:id)— если поста нет — эксепшн и в лог!
post->isClosed()— ок
user->canPost()— права доступа это совсем другая история
comment->save()— сохранение, обработка сохранилось/нет — тоже другая история
Точки выхода или немного о структурном программировании