Комментарии 30
А так да, автоформатирование выручает, не раз проверял.
"Важное" мнение мимокрокодила-питониста про xdebug: вчера впервые пытался его подружить с phpstorm, завелось, но evaluate expression обламывается на почти всём чуть сложнее арифметики :(
Возился с связкой xcode + iOS simulator + selenium2 + appium + behat, пытался получить что-то вроде ipython из которого смогу поэкспериментировать с интерактивным управлением мобильным safari из php.
github.com/Litipk/Jupyter-PHP
www.php-fig.org/psr/psr-2
github.com/php-fig/fig-standards/blob/master/proposed/extended-coding-style-guide.md
Не надо про python… Тоже всякого пишут. Везде всякого пишут. И в императивных, и в декларативных, и в php, и в python и даже в строгом golang.
procedure TPrintClass.GetPreview(ofsP:integer=0);
var rw, rp, cr, PhysM:TRect;
pw, ph, ww, wh, n:integer;
kx, ky, k, sc:double;
land:boolean;
ofs:TPoint;
MyRgn: HRGN;
mt, ml, mr, mb, kp:double;
Xi, Yi, i:integer;
Xmin1, Ymin1, Xmax1, Ymax1, x, y, w, h:integer;
И далее идет функция строк эдак на 300 в которой все эти замечательные переменные активно используются, умножаются, делятся, только разве что не размножаются, примерно как-то вот так:
kx:=ww/pw;
ky:=wh/ph;
k:=min(kx, ky);
rp.Right:=round(pw*k);
rp.Bottom:=round(ph*k);
rp.Left:=(bmp.Width — rp.Right + 50) div 2;
rp.Top:=(bmp.Height — rp.Bottom + 50) div 2;
inc(rp.Right, rp.Left);
inc(rp.Bottom, rp.Top);
Комментариев на эти 300 строчек ровно 0.
И вот надо тебе в этом замечательном превью что-то поменять слегонца :)
Один раз pw с ww перепутаешь — все: кровь, кишки, access violation.
И вроде понимаешь что надо их переименовать, но ведь чтобы переименовать надо же сначала понять что они значили по авторской задумке.
А у Вас тут прямо тепличные условия какие-то описаны.
Подытожу — есть такая профессия — в чужом *****-коде ковыряться.
Обычно, если есть такой код, то скорее всего где-то выше есть ещё и глобальные переменные с такими же именами)
Вот почему когда я разбираю код на Python после индусов, то сильно радуюсь что так
if (!function_exists('CutFromTo')){ function CutFromTo($string, $from, $to){$fstart = stripos($string, $from); $tmp = substr($string,$fstart+strlen($from)); $flen = stripos($tmp, $to); return substr($tmp,0, $flen);}}
на нем писать нельзя.
Я тоже хотел с лямбдой сделать. Но в итоге решил, что это неспортивно, поэтому у меня всё-таки в две строчки.
if(not('cut_from_to' in dir())):
def cut_from_to(string, from_, to): fstart = string.lower().find(from_.lower()) ; tmp = string[fstart + len(from_):]; flen = tmp.lower().find(to.lower()); return tmp[:flen]
Можно, и нельзя приватные члены класса, константы, много чего еще. Не надо мериться — у всех хватает кривых конструкций на уровне языка и возможностей стрелять себе в ногу.
Вот черт, даже в голову не пришло такое написать. Заслужено схватил минусов :(((
Его писал уверенный миддл индус.
Я серьезно.
Все эти шутки про идусский код оказались правдой и там таакооое бывает)
Лучше один раз увидеть:)
Последний раз, очень крутой индо-программист с окладом 400$ в неделю (это овердофига для индусов) удалил проект с качественным кодом на Laravel, где все было разложено по полочкам и работало. Вместо него он начал писать с нуля где каждая страница представляла из себя отдельный ПХП файл.
Естественно все интеграторы оплаты, кредитные карты и все такое были удалены вместе с проектом.
Дак вот он пытался открывать сайт интегратора через фрэйм и слать им запросы обычными ajax, которые естественно не принимались.
А клиент у меня спрашивал, мол как так, в предыдущей версии все работает.
Вобщем смех и грех:)
Вот неужели он не догадался ввести переменную и отправлять ее, но сделал парсер.
Ну вот как так?)
Тут была статья про написание программы генетическими алгоритмами:
Комбинируем куски кода до тех пор, пока не получим приемлемое решение.
Возможно индусы пишут похожим образом.
Вышеупомянутый когда-то парсил сайт и сейчас использует свои наработки.
Шутки про индусский код были весьма мной любимы, пока не достался мне в доработку проект после них. Файлы по шесть тысяч строк без комментариев осложнялись хаотичным именованием переменных — не более двух символов в имени. Вишенкой на торте было объявление функции в шаблоне страницы одного из самописных плагинов, вызываемой без всяких проверок и зависимостей в другом таком плагине. Думаю, у каждого, кто работал с индусским кодом, есть истории, как не надо писать.
Я хотел было написать, может кто-то специально использовал обфускатор чтобы защитить платный плагин, но потом прочёл все комментарии...
Самая большая проблема в том, что синтаксис
Спорно, синтаксис не запретит использовать eval, copy/paste programming и продавать свой говнокод.
Тут проблема в генетеке автора такого кода.
Опыт выявления одного бага или как не надо оформлять свой код