Pull to refresh

Comments 70

"public interface IWHWGRWGRDao : IDao"

Если нетрудно, разъясните, пожалуйста, идею шутки. Мне интересно, но, к сожалению, никак не могу додуматься.

Заранее, спасибо.
(высоко глядя в небо с умным взглядом) Дао
Ну как в чём, пришёл поэт и дал своему совершенному интерфейсу название - Dao. Быть может он, конечно, имел в виду приземлённый Database Access Object, а быть может и то, самое высокое, DAO! А за ним пришёл ремесленник и... напачкал... IWHWGRWGR... Впрочем, быть может, он также имел в виду первые буквы строк 148-го сонета Шекспира. Bkb 156-го. Я в них иногда путаюсь.
Дао, которое можно наследовать, не есть истинное Дао.
А это интерфейс, так что это скорее проводник для простых смертных IWHWGRWGRов
Не скомпилируется, так как открытое (public) ДАО - не есть истинное дао.
неужели я тут один, кто не понимает, в чем прикол следующего?

int* var;
...........
*var++;

прошу разъяснить
это рандомайз такой, инкрементим указатель и получаем "черти что и сбоку бантик", стоящий на sizeof дальше.
мы получаем все что угодно, так как var не объявлена указателем на массив, дальнейшее поведение указателя не предопределено.
Какой еще указатель на массив, такие вещи вообще редко используются (аля int (*pInt)[5];)? Там может быть сколь угодно памяти выделено. Пример нормальный и работать будет, нужно бОльший кусок выкладывать, который будет объяснять бессмысленность ситуации:)
Вы путаете указатель на массив с массивом указателей.
Это конечно не относится к теме, но не приведете ли пример. По моей памяти:
Массив указателей: int *pArr[5];
Указатель на массив: int (*pArr)[5];

В любом случае, как писал человек, ничто не мешает сделать так :) http://habrahabr.ru/blog/humour/42862.ht…
у [] больший приоритет, чем у *
Отсюда делаем вывод, что скобочки вот там вот, это как раз для повышения приоритета оператора :)
Да, и таким образом получаем (указатель)[5 штук] - т.е. массив указателей. Массив, из 5 указателей! Если же мы не пишем скобочки, то приоритет [] выше и получаем [массив из 5 штук] на который указывает * указатель. Т.е. Указатель на массив.
Нет, не нужно. Если бы речь шла о том, чтобы передвинуть указатель и использовать
разыменованное значение, то сразу возникает вопрос — где тут используется
значение? Нигде. Указатель просто разыменовывается, и всё.
Приоритет операции ++ выше, чем операции *, отсюда и бессмысленность.
Ну, либо имелось ввиду (*var)++, либо же просто var++; так как это разыменование действительно не к чему, ибо результат не сохраняется...

Хотя это может такая изощренная проверка на валидность указателя ;)
нормальный код, где-нибудь в "......" var чему-нибудь присваивается
но ведь там могло быть

int* var;
var = new int[5];
*var++;
В памяти гораздо больше мусора, следовательно и рандомит надежнее...
Зависит от реализации оператора new, насколько я помню new действительно не гарантирует обнуления памяти, но к примеру майкрософтский crt неинициализированую память на куче заполнит 0xcdcdcdcd. Под линухами и макос обнулит.
UFO landed and left these words here
напоминает идеи некоторых сайтов — выкладывать собрания цитат с одного известного сайта
Когда говорят про приколы в коде, всегда вспоминаю это:

Программистский шедевр на индусском форуме на тему "как узнать завтрашнюю дату":

void get_tomorrow_date( struct timeval *date )
{
sleep( 86400 ); // 60 * 60 * 24
gettimeofday( date, 0 );
}

или это:

MessageBox(NULL, "Вы действительно хотите удалить выделенный объект?", "Внимание", MB_OK |MB_ICONQUESTION);
Да ладно индусы, вчера натравил профайлер на один скрипт, накопал вот такой кусок:

$line = fgets($fp);
$line = preg_replace("/\r*\n/", '', $line);

через который проходит больше 600тыс. строк.
следует задуматься а то-ли вы делаете, если на пхп приходится обрабатывать 600к строк
void get_tomorrow_date( struct timeval *date )
{
timemashine( 86400,Forward ); // 60 * 60 * 24
gettimeofday( date, 0 );
timemashine( 86400,Back ); // 60 * 60 * 24
}
* дико ржот над get_tomorrow_date, пугая всех окружающих *
Ну вообще большинство примеров довольно нормальные и говорят сами за себя
1. к примеру если ссылочный тип для була
2. ну это надо в контексте проги смотреть
6. вообще не понял, а где тут прикол?
7 и 8. правильный подход, чтобы был читабельный код
и т.д.
7 - умножение сущностей без необходимости
8 - очень правильно с т.3. и читабельности, и рефакторинга
8 - угу, а вдруг у кастомера NUM_HANDS изменится...
Никто и никогда не убедит меня, что ONE читабельней 1.
Мне в школе на уроках русского языка говорили, что цифры читабельней.

А NUM_HANDS — действительно разумно. Тут даже на с точки зрения «изменится», а просто смысл который мы вкладываем в цифру 2.
Я бы мог убедить. :) Не в том, что читабельнее, а в том, что иногда приходиться и такое
делать. По крайней мере, мне в Си++ приходилось.
Я бы с радостью послушал.
Т.е. использовали константу ONE вместо один.
Расскажите зачем, если вам не сложно.
Зато потом константу можно единожды изменить:
public static final int ONE = 2;
Как говорит мой знакомый: "чтобы процесс изучения кода был более творческим" :)
Ужас какой. Вроде, днём писал ответ. Сейчас заглядываю — нет ответа. Второй раз такое.
Надо срочно что-то делать.

[вздыхает]

Ладно, попробую ещё раз. Речь о разработке "умеренно сложных" алгебраических структур
средствами Си++ с использованием шаблонов. Например, пишем класс квадратных матриц
и добавляем метод создания единичной матрицы (все элементы равны 0, кроме элементов
на главной диагонали, которые равны 1):


template<typename T, int size>
Matrix<T, size> Matrix<T, size>::identity() const
{
Matrix<T, size> result;

for(int i = 0; i < size; i++)
for(int j = 0; j < size; i++)
result[i][j] = (i == j)? static_cast<T&gt(1) : static_cast<T>(0);

return result;
}


И этот метод прекрасно работает со всеми встроенными числовыми типами. Но предположим,
что нам нужна матрица векторов (в математическом смысле, не std::vector). Для вектора
может быть не реализован метод operator=(int) (в нём не так много смысла).

Если класс вектора разрабатываем не мы сами, то расширить его методом operator=(int)
мы не можем (он унарный). Облом?

Нет. Решение заключается в том, чтобы завести отдельный шаблонный класс numeric_consts
и специализировать его для всех встроенных типов:


template<>
class numeric_consts<float>
{
public:
static float zero() { return 0.0F; }
static float one() { return 1.0F; }
. . .
}


Код внутри Matrix станет таким:

result[i][j] =
(i == j)? numeric_consts<T>::one() : numeric_consts<T>::zero();


При появлении нового типа, мы можем специфицировать numeric_consts для него
самостоятельно.
Ага, это как std::numeric_limits ::min(), кажется, которая приводится в пример в Effective C++
;)

Но это все равно не оправдывает смысл существования ONE в такой форме.
В такой как привели Вы — да, полезно.
Не оправдывает, да. Просто вспомнил случай, когда пришлось писать что-то
подобное. :)
по поводу ONE можно поспорить, все зависит от контекта программы, может это индекс первого элемента и вполне вероятно, что значение может измениться на 0.
В таком случае это не ONE.
Это INDEX_BASE или что-то в этом роде.
static const int NUM_HANDS = 2;


На будущее, на всякий случай?
Для избежания magic numbers наверное :)
UFO landed and left these words here
Обычная трёхзначная логика, ничего странного. :) Но самодокументирующим этот код назвать сложно. :)
в этом-то и заключается юмор статьи!
В каком-то, другом случае это может быть заглушка, потому что планируется дальнейшее расширение функции openWin. Но видимо не в этом.
Они всё собираются дописать туда открытие окна с баннерной сетью, да всё забывают.
vBulletin 2.4.5 nullified by (кто-то там):

function mood($str) {

return $str;

}
Опечатался...

vBulletin 2.4.5 nullified by (кто-то там):

function moo($str) {

return $str;

}
я могу ошибаться, но это могут быть последствие обфускации и nullify.
Видел в коде вот такое (PHP):


function dat(){
// ф-я возвращает правильную текущую дату в формате YYYYMMDD
$y=date("Y");
if($y<10)$y="0".intval($y);
$m=date("m");
if($m<10)$m="0".intval($m);
$d=date("d");
if($d<10)$d="0".intval($d);

return $y.$m.$d;
};
ну это всего лишь бесконечный цикл :) оригинальнее, чем просто
while(1) { }
нормальный компилятор этот код оптимизирует именно до while(1) { }
с баша в тему:
Shiry:Прикинь. У нас препод по физике ставит автоматы тем кто прогу ему демонстративную напишет, чтоб там графики, амплитуды показывала итд. Короче подошли с друзьями, он нам сказал прогу какого то вьетнамца с паска перевести в делфи. Бля, так этот далбайоп все коменты и переменные с функциями на вьетнамском назвал!!! сча самые перлы скину.
Shiry:var view,cot,hang,maunen,maudothi,maukhung,quay:integer;
комент, бля.. )
toado,toado1:array[1..2,1..2] of integer; {luu tdo cua vung anh dua vao bo nho}
KruGoZor Кот понра)
Shiry:procedure xuly;
procedure xulymenu;
procedure chuyendulieu;
procedure xoamanhinh;
procedure xulyphim;
Вот блин и чо эти процедуры делают?))
KruGoZor Я понил тока ту каторая делает меню (xulymenu)
KruGoZor Еще есть каторая ничо ниделает (chuyendulieu)
function _boundarySplit($input, $boundary)
{
$parts = array();

$bs_possible = substr($boundary, 2, -2);
$bs_check = '\"' . $bs_possible . '\"';

if ($boundary == $bs_check) {
$boundary = $bs_possible;
}

$tmp = explode('--' . $boundary, $input);

for ($i = 1; $i < count($tmp) - 1; $i++) {
$parts[] = $tmp[$i];
}

return $parts;
}


Взято из pear.php.net mimeDecode.php

Вобще впринципе там половина кода сплошные утечки памяти :)
Sign up to leave a comment.

Articles