-
+77
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
public void log(String msg) {
try {
StringBuffer sb = new StringBuffer(), sb2 = new StringBuffer();
sb.append(getDeviceId()).append(": ").append(msg).append('\n');
sb2.append("^^ ").append(sb);
System.out.println(sb2.toString()); // Вывод в консоль
platform.logEvent(msg.getBytes()); // Вывод в лог трубы
} catch (Exception e) {
// Ignore
}
}
Проект под BlackBerry. Каменты мои.
Ниасилил в чем соль двух стрингбуферов О_о
Gsom11,
09 Февраля 2011
-
+166
- 1
- 2
- 3
- 4
- 5
- 6
- 7
if(VisabilityOnOff==true){
document.SearchForm.searchoption[0].disabled=true;
document.SearchForm.searchoption[1].disabled=true;
}else if(VisabilityOnOff==false){
document.SearchForm.searchoption[0].disabled=false;
document.SearchForm.searchoption[1].disabled=false;
}
kuku,
09 Февраля 2011
-
+92
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
I:=1;
while I<=High(Sockets) do
begin
if FD_IsSet(Sockets[I],FDSet) then
if Recv(Sockets[I],…)<=0 then
begin
// Связь разорвана, надо закрыть сокет
// и удалить его из массива
CloseSocket(Sockets[I]);
for J:=I to High(Sockets)-1 do
Sockets[J]:=Sockets[J+1];
Dec(I);
SetLength(Sockets,Length(Sockets)-1)
end
else
begin
// Получены данные от клиента, надо ответить
Send(Sockets[I],…)
end;
Inc(I)
end;
На первый взгляд может показаться странным, почему для перебора элементов массива используется цикл while, а не for. Но в дальнейшем мы увидим, что размер массива во время выполнения цикла может изменяться. Особенность же цикла for заключается в том, что его границы вычисляются один раз и запоминаются в отдельных ячейках памяти, и дальнейшее изменение значений выражений, задающих эти границы, не изменяет эти границы. В нашем примере это приведёт к тому, что в случае уменьшения массива цикл for не остановится на реальной уменьшившейся длине, а продолжит цикл по уже не существующим элементам, что приведёт к трудно предсказуемым последствиям. Поэтому в данном случае лучше использовать цикл while, в котором условие продолжения цикла полностью вычисляется при каждой его итерации.
TarasB,
09 Февраля 2011
-
+165
- 1
- 2
- 3
- 4
- 5
if (aNew=='true'){
path = './page.html?show='+ashow+'&avail='+aavail+'&page='+page+'&size='+asize+'&order='+aorder+'&ordera='+aordera+'&refresh='+arefresh+'&letter='+aletter+'&sortcount='+asortcount+'&search=off&new=true';
}else{
path = './page.html?show='+ashow+'&avail='+aavail+'&page='+page+'&size='+asize+'&order='+aorder+'&ordera='+aordera+'&refresh='+arefresh+'&letter='+aletter+'&sortcount='+asortcount+'&search=off&new=false';
}
разница в &new=true/false
Код из большого серьезного продакшен проекта.
kuku,
09 Февраля 2011
-
+164
- 1
$update = !empty($id) and $id > 0;
Вопреки ожиданиям автора, выражение $id > 0 вообще никогда не принимается во внимание.
/* Ознакомьтесь с приоритетом операций */
Сначала отработает $update = !empty($id)
потом значение из $update будет сравниваться с $id > 0 и результат сравнения никуда не попадёт.
Рекомендация: используйте && вместо оператора "and".
zabuhailo,
09 Февраля 2011
-
+161
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
/**
* 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.
kitaec,
09 Февраля 2011
-
+161
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
// из объявления класса
...
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;
...
}
Ну и весь остальной код состоит из этих говно-паттернов. Об абстракциях товарищ понятия не имеет.
kitaec,
09 Февраля 2011
-
+162
- 1
- 2
- 3
- 4
- 5
<?php
function is_get($id) {
return (count(array_unique(str_split($id))) == 1);
}
?>
Гет или не гет?)
hidespb,
09 Февраля 2011
-
+162
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
SeismicDriver* SeismicSelectionDG::seismicDriver()
{
Exf2dMW* mw = Exf2dMW::getMW(this);
_seismicDriver = mw->seismicDriver();
if ( !mw || !_seismicDriver)
return 0;
return _seismicDriver;
}
Все тот же коллега китаец. Exf2dMW - класс главного окна приложения. Во-первых бесмыссленно проверять его на 0, потому что без него вообще бы ничего не работало, но и как видно проверяет его он все равно не там. Ну и проверка на 0 _seismicDrvier тоже лишняя. Итог никакие проверки не нужны да и вообще первую строку в методе можно перенести в конструктор а возвращать член класса _seismicDriver.
kitaec,
09 Февраля 2011
-
+146
- 1
- 2
<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, если не меньше. Сколько обезьян они наняли столько печатать?
RaZeR,
09 Февраля 2011