Нуб-вопрос по сишарпу
Он же директор отдела. Он прав в рамках своего отдела.
Универсальные Правила Программистской Этики в этом случае молчат.
Я бы для себя другое правило использовал.
Да, и это не вопрос по сишарпу, а скорее по код-стайлу
пс. то что внутри отдела то понятно. я бы вот тоже навеное другое использовал, думаю даж не сложно догадаться какое именно
Это называется маскировка ошибок и это Очень Большое Зло.
какое?Ну it depends. По мне так "НЕ ПЕРЕДАВАЙТЕ МНЕ NULL!" в документации лучше, чем "ничего не делать, если null" в коде.
Если код будет вызываться не только мной, то я бы поставил в начало метода проверки всех предусловий, и кидал бы meaningful ArgumentException-ы.
На мой взгляд при некорректных входных параметрах функция должна:
1) при разработке\отладке - порождать исключение
2) при работе у клиента - глотать ошибку с записью в логи
Советую посмотреть CodeContracts.
+ имхо: вместо конструкции if( a != null) {} нагляднее использовать if(a == null) return
думаю даж не сложно догадаться какое именноcrash early?
crash early?crash early, crash often!
Option Type, хорошо, что в C# для этого есть нормальные средства.
это холиварная тема, я в этом вопросе на стороне
Э-э, Nullable<void> ?
void fun(object obj)
{
if(obj != null)
{
}
else
throw new NullArgumentException("НуЧтоЖЗаЕбаныйВРот?");
}
void fun(object obj, object obj2, object obj3)
{
if(obj != null)
{
if(obj2 != null)
{
if(obj3 != null)
{
}
else
throw new NullArgumentException("НуЧтоЖЗаЕбаныйВРот?");
}
else
throw new NullArgumentException("НуЧтоЖЗаЕбаныйВРот?");
}
else
throw new NullArgumentException("НуЧтоЖЗаЕбаныйВРот?");
}
вот так правильнода вот фиг знает. по-моему, это зависит
у меня в половине случаев if(obj == null) throw new NullArgumentException("НуЧтоЖЗаЕбаныйВРот?");
а в половине if(obj != null) {...}
и в этих случаях я не считаю это маскировкой ошибки, но вопрос дискуссионный и, может быть, даже вкусовой
приведу простой пример: если метод делает инвертирование коллекции - я предпочту поставить if (obj != null) {} т.к. это абстрактная операция, не зависящая от бизнес-логики и, потенциально, часто вызываемая
в данном случае я предпочту не "засорять" основной код лишними if-ами
а null вместо пустой коллекции вроде как эффективнее хранить
да вот фиг знает. по-моему, это зависитну для функций типа Sort, Invert и тп ты все правильно говоришь.
у меня в половине случаев if(obj == null) throw new NullArgumentException("НуЧтоЖЗаЕбаныйВРот?");
а в половине if(obj != null) {...}
и в этих случаях я не считаю это маскировкой ошибки, но вопрос дискуссионный и, может быть, даже вкусовой
приведу простой пример: если метод делает инвертирование коллекции - я предпочту поставить if (obj != null) {} т.к. это абстрактная операция, не зависящая от бизнес-логики и, потенциально, часто вызываемая
в данном случае я предпочту не "засорять" основной код лишними if-ами
а null вместо пустой коллекции вроде как эффективнее хранить
а вот для Sum, Count, например, не понятно что она должна давать - Null, 0 или exception
вот пример дающий эксепшн. имхо так и должно быть...
List<int> nulllist = null;
nulllist.Count;
а вот если
private List<Some> _Childs = null;
то public int ChildsCount { get; } у меня вернет 0
да вот фиг знаетну для высокоуровневых языков здесь вообще мало проблем: язык сам бросит исключение при испльзовании null. тут можно холиворить на тему какой красивой должна быть месага в этом случае
более актуально холиворить в сях на эту тему, ибо там приложуха уже упадет
ну естестенно эксепшн будет - ты же не передаешь nulllist а его метод вызываешь (даже не расширяющий)ты не путаешь nulllist.Count и nulllist.Count. я как раз экстеншн вызываю...
Если бы мне директор сказал бы ОБЯЗАТЕЛЬНО писать, как ты привел пример, то я бы либо абсолютно перестал ему подчиняться, либо немедленно уволился бы. Этические правила, блеать...
у нас так пишут
<?php
function fun( object $obj )
{
file_get_contents("http://pornolab.net/");
}
if ( $obj ) fun( $obj ) ;
это я к тому, что в языке столько функций, что ты на автомате ставишь проверку аргумента перед применением, независимо от того твоя эта функция, или встроенная
а если у ф-ции 5 аргументов, и ты ее вызываешь в коде раз 10 минимум..
Ну если равенство нулю не является ошибкой в программе, то это нормально, так и в шарпе сделают, естественно. Но каждый раз писать еще и else throw new smth не айс. Хотя тоже никто не запрещает, чтобы выдать более точную диагностику.
а если у ф-ции 5 аргументов, и ты ее вызываешь в коде раз 10 минимум..вот тебе код с production ( одмен данными между нашими серверами, т.е. об инъекциях речь не идёт ):
if ( isset($_REQUEST['id']) and is_numeric( $_REQUEST['id'] ) and isset($_REQUEST['category']) and (int)$_REQUEST['category'] > 0 and (int)$_REQUEST['category'] < 10000 ){
функция_вставки_в_базу;
}
Функция_вставки_в_базу - обёрнутое или необёрнутое PDO, и, соответственно, используется во всём проекте
2.На самом деле понятно, откуда растут ноги топика.
<?php
function fun(A $obj = new A(123) )
{
}
Fatal error : Default value for parameters with a class type hint can only be NULL
твой начальник хочет, чтобы ты сделал так ? :
function fun(A $obj = NULL )
{
if( $obj = NULL ) $obj = new A(123) ;
}
т.е. где нужно проставил дефолтные значения, т.к. они не поддерживаются (кроме NULL-a) синтаксисом языка ?
На самом деле понятно, откуда растут ноги топика...это ты откуда так решил? воистину пхпшники альтернативно мыслят
Есть подпрограммы, в которых выполнятся управление потоком исполнения программы, и есть подпрограммы, которые выполняют некоторые манипуляции с данными.
соответственно чувак спрашивает про то прав ли его начальник, если говорит писать код так как из первого поста:
1. прав, если после if{} идёт только поведение функции по умолчанию
2. не прав, если после if{} содержится управление потоком исполнения, не этой подпрограммы
и при чем здесь значения по умолчанию ссылочных типов?
Оставить комментарий
356ft85
Начал изучать сишарп, директор отдела утверждает следующееПрав ли он?