- 1
$update = !empty($id) and $id > 0;
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+164
$update = !empty($id) and $id > 0;
Вопреки ожиданиям автора, выражение $id > 0 вообще никогда не принимается во внимание.
/* Ознакомьтесь с приоритетом операций */
Сначала отработает $update = !empty($id)
потом значение из $update будет сравниваться с $id > 0 и результат сравнения никуда не попадёт.
Рекомендация: используйте && вместо оператора "and".
+161
/**
* Standard QWidget Constructor
*/
SeismicSelectionDG::SeismicSelectionDG(QWidget *parent)
: QDialog(parent), ui(new Ui::SeismicSelectionDG)
{
...
}
/**
* Destructor
*/
SeismicSelectionDG::~SeismicSelectionDG()
{
if(ui) delete ui;
}
/**
* Set title to dialog box
* @param title The title for dialog box
*/
void SeismicSelectionDG::setDialogTitle(const QString& title)
{
QDialog::setWindowTitle(title);
}
Обратим внимание как мой коллега китаец тщательно документирует код. метод setDialogTitle - в особенности. А учитывая что QDialog::setWindowTitle - библиотечный метод, необходимость оборачивать его в свой метод полностью отсутствует. Также глупость в деструкторе - для delete необязательно проверять указатель на 0.
+161
// из объявления класса
...
float _x_3DMin; /**< Min X value */
float _x_3DMax; /**< Max X value */
float _z_3DMin; /**< Min Z depth value */
float _z_3DMax; /**< Max Z depth value */
/* 2D seismic variables */
float _x_2DMin; /**< Min X value */
float _x_2DMax; /**< Max X value */
float _z_2DMin; /**< Min Z depth value */
float _z_2DMax; /**< Max Z depth value */
/* No seismic selection variables */
float _xMin; /**< Min X value */
float _xMax; /**< Max X value */
float _zMin; /**< Min Z depth value */
float _zMax; /**< Max Z depth value */
...
void SeismicSelectionDG::initMembers()
{
// initialise values
_x_3DMin = 0.0F;
_x_3DMax = 0.0F;
_z_3DMin = 0.0F;
_z_3DMax = 0.0F;
_x_2DMin = 0.0F;
_x_2DMax = 0.0F;
_z_2DMin = 0.0F;
_z_2DMax = 0.0F;
_xMin = 0.0F;
_xMax = 0.0F;
_zMin = 0.0F;
_zMax = 0.0F;
...
}
Ну и весь остальной код состоит из этих говно-паттернов. Об абстракциях товарищ понятия не имеет.
+162
<?php
function is_get($id) {
return (count(array_unique(str_split($id))) == 1);
}
?>
Гет или не гет?)
+162
SeismicDriver* SeismicSelectionDG::seismicDriver()
{
Exf2dMW* mw = Exf2dMW::getMW(this);
_seismicDriver = mw->seismicDriver();
if ( !mw || !_seismicDriver)
return 0;
return _seismicDriver;
}
Все тот же коллега китаец. Exf2dMW - класс главного окна приложения. Во-первых бесмыссленно проверять его на 0, потому что без него вообще бы ничего не работало, но и как видно проверяет его он все равно не там. Ну и проверка на 0 _seismicDrvier тоже лишняя. Итог никакие проверки не нужны да и вообще первую строку в методе можно перенести в конструктор а возвращать член класса _seismicDriver.
+146
<div id="minobfl-page">
<div id="minobfl-page-content"><div style="margin: 10px 5px 5px;"><table style="border-bottom: 2px solid rgb(204, 204, 204);" align="center" border="0" cellpadding="4"><tbody><tr><td align="center"><div id="rg-map"><!--End Preload Script--><!--ImageReady Slices(r-v4_final.psd)--><table id="Table_01" border="0" cellpadding="0" cellspacing="0" height="323" width="600"><tbody><tr><td colspan="2"><img name="r_01" src="images/rmap/r_01.gif" alt="" usemap="#r_01_Map" border="0" height="84" width="81"></td><td colspan="3"><img id="r_02" src="images/rmap/r_02.gif" alt="" usemap="#r_02_Map" border="0" height="84" width="81"></td><td colspan="2"><img id="r_03" src="images/rmap/r_03.gif" alt="" usemap="#r_03_Map" border="0" height="84" width="81"></td><td><img id="r_04" src="images/rmap/r_04.gif" alt="" height="84" width="81"></td><td><img id="r_05" src="images/rmap/r_05.gif" alt="" height="84" width="81"></td><td><img id="r_06" src="images/rmap/r_06.gif" alt="" usemap="#r_06_Map" border="0" height="84" width="81"></td><td><img id="r_07" src="images/rmap/r_07.gif" alt="" usemap="#r_07_Map" border="0" height="84" width="114"></td></tr><tr><td rowspan="2"><img src="images/rmap/r_08.gif" alt="" height="85" width="47"></td><td><img id="r_09" src="images/rmap/r_09.gif" alt="" usemap="#r_09_Map" border="0" height="45" width="34"></td><td><img id="r_10" src="images/rmap/r_10.gif" alt="" usemap="#r_10_Map" border="0" height="45" width="34"></td><td><img id="r_11" src="images/rmap/r_11.gif" alt="" usemap="#r_11_Map" border="0" height="45" width="34"></td><td colspan="2"><img id="r_12" src="images/rmap/r_12.gif" alt="" usemap="#r_12_Map" border="0" height="45" width="34"></td><td rowspan="2"><img id="r_13" src="images/rmap/r_13.gif" alt="" usemap="#r_13_Map" border="0" height="85" width="60"></td><td rowspan="2"><img
Не очень говнокод, но ЖИСТОКЕ HTML+JS. Исходный код страницы портала для военнослужащих (http://dom.mil.ru/). Это - только 1/20, если не меньше. Сколько обезьян они наняли столько печатать?
+162
//...
CString signature(pMsg->clipEvent.signature);
int indx = signature.Find('-');
if(!indx)
signature.Delete(indx);
indx = signature.Find('-');
pEvent->eventData.signature.doorNum = _ttoi(signature.Left(indx));
signature.Delete(0, indx+1);
indx = signature.Find('-');
pEvent->eventData.signature.eventType = _ttoi(signature.Left(indx));
signature.Delete(0, indx+1);
indx = signature.Find('-');
pEvent->eventData.signature.eventID = _ttoi(signature.Left(indx));
signature.Delete(0, indx+1);
indx = signature.Find('-');
pEvent->eventData.signature.itemNumber = _ttoi(signature.Left(indx));
signature.Delete(0, indx+1);
indx = signature.Find('-');
CString dateTimeStr;
dateTimeStr = signature.Mid(5, 2);
dateTimeStr += '/';
dateTimeStr += signature.Mid(8, 2);
dateTimeStr += '/';
dateTimeStr += signature.Left(4);
dateTimeStr += ' ';
dateTimeStr += signature.Mid(11, 2);
dateTimeStr += ':';
dateTimeStr += signature.Mid(14, 2);
dateTimeStr += ':';
dateTimeStr += signature.Mid(17, 2);
pEvent->eventData.signature.eventDateTime = DEM_getTimeDateStampFromTimeDateString(dateTimeStr);
signature.Delete(0, 20);
pEvent->eventData.signature.cameraIndex = _ttoi(signature);
//...
инициализация числовых переменных из строки с заранее известным форматом...
так как автор "кончал на MFC", с функцией sscanf западло было работать
+159
<?php
//////////
static function AddKeyDis($meta_key,$meta_dis=null){
if(is_array($meta_key)){
return self::$result=array("meta_key"=>$meta_key['meta_key'],"meta_dis"=>$meta_key['meta_dis']);
}elseif($meta_dis!==null){
return self::$result=array("meta_key"=>$meta_key,"meta_dis"=>$meta_dis);
}
return null;
}
//////////
?>
эх =)
+161
// Часть первая. Объявления. Exceptions.hpp
template <typename E>
struct ExeptionKeeper
{
E * exptn;
ExeptionKeeper(E * ex)
{
exptn = ex;
}
~ExeptionKeeper()
{
if(exptn != NULL )
{
delete exptn;
}
}
E * operator -> ()
{
return exptn;
}
};
#define EX_TRY(XX) try { XX }
#define EX_CATCH(TT, NAME, XX) catch (TT *_ex) { ExeptionKeeper<TT> NAME(_ex); XX }
/// Часть вторая. Использование. ModelsHelper.cpp
.... // код
EX_TRY
(
............
TestParams(args); // кидает new ParamsException в случае неудачи
............
TestFunctions(funclist); // Кидает new FuncsException ...
............
//// тут еще есть вызовы, кидающие исключения
............
)
EX_CATCH
( ParamsException, exp,
GLogger(levelerror).Log("Invalid params for model ", exp->model(), " [", exp->paramlist().str(), "]");
)
EX_CATCH
( FuncsException, exp,
GLogger(levelerror).Log("Invalid functions for model ", exp->model(), " [", exp->funclist().str(), "]");
)
EX_CATCH
( LevelsException, exp,
GLogger(levelerror).Log("Invalid levels for model ", exp->model(), " [", exp->levelslist().str(), "]");
)
EX_CATCH
( .... , exp,
........
)
.... // код
И снова на тему исключений.
Прислал приятель. Какой-то софт для аэропортов.
Комменты на русском мои.
+160
<?php
class UserSessionComponent extends Component {
//...
protected function loginByUserId($user_id, $is_autologin = false) {
$list = $this->_loadComponents($this->components, array('UserAuth'));
$userAuth = $list['UserAuth'];
$userAuth->startup($this->controller); # !!! WORKFLOW VIOLATION !!!
$method = $is_autologin ? 'autologin' : 'login';
if ($userAuth->$method($user_id)) {
return $this->controller->Session->read('User.data');
}
}
//...
}
class UserAuthComponent extends BaseMagicComponent {
protected $loginType = 'explicit';
//...
public function autologin($params = array()) {
$this->loginType = 'implicit';
return $this->_login($params);
}
public function login($params = array()) {
$this->loginType = 'explicit';
return $this->_login($params);
}
//...
protected function _login($params = array()) {
switch (true) {
case (is_array($params) && isset($params['user']) && isset($params['password'])):
$result = $this->loginByUserAndPassword($params['user'], $params['password']);
break;
case (is_numeric($params) && $params > 0):
$result = $this->loginUser($params);
break;
default:
if (empty($params)) {
$result = false;
} else {
$result = $this->loginUser($params);
}
}
// ...
}
// ...
public function loginUser($user) {
switch (true) {
case is_object($user):
if (isset($user->data)) {
$a_user = $user->data;
} else {
return false;
}
break;
case (is_numeric($user) && ($user > 0)):
if (!($a_user = $this->User->findById($user))) {
return false;
}
break;
case (is_array($user) && (isset($user['User']['id']))):
$a_user = $user;
break;
default:
return false;
}
// ...
CFL::using('log');
if (empty($GLOBALS['loginIsLogged'])) {
$loginLog = new cflLoginTrackingLogger();
if ($this->loginType == 'implicit') {
$loginLog->implicit_login(array('user_id' => $a_user['User']['id']));
} else {
$loginLog->explicit_login(array('user_id' => $a_user['User']['id']));
}
$GLOBALS['loginIsLogged'] = true;
}
// ...
}
}
Сорри за много-много кода, еле-еле вписался в лимит. Но пришлось запостить все. Логическая цепочка совершенно потрясающая (смотрим с самого верхнего метода и идем дальше к самому нижнему методу). Тут у нас кода просто по колено: сумасшедший пахлава-код, использование глобальной переменной флага, особое извращенное использование конструкции switch, фактическое дублирование этого самого switch в двух последних методах, нейминг переменных и методов...
Казалось бы, как все это вообще могло быть написано? Но использование компонента с говорящим именем BaseMagic все ставит на свои места.