Форум: "Прочее";
Текущий архив: 2011.12.25;
Скачать: [xml.tar.bz2];
Внизпрограммирование IncDay-style Найти похожие ветки
← →
Virgo_Style © (2011-09-02 22:04) [0]
if (somebool = false) then begin
exit;
end;
if List.Count>0 then begin
for i:=0 to List.Count-1 do begin
if fileexists( List[i] ) then begin
try
DeleteFile( List[i] );
except
end;
end;
end;
end;
код слегка условный, но полностью передающий особенности стиля.
я не пойму, человеку посимвольно платили, или что это вообще такое?
p.s. На самом деле, проверка Count>0 имеет свое объяснение: кое-где бывало беззнаковым. Byte или word, к примеру. Видимо, автор обжегся однажды и далее дул на воду всегда.
← →
Virgo_Style © (2011-09-02 22:07) [1]
> кое-где бывало
*кое-где i бывало
← →
Игорь Шевченко © (2011-09-02 22:12) [2]
> или что это вообще такое?
http://lurkmore.ru/%D0%91%D1%8B%D0%B4%D0%BB%D0%BE%D0%BA%D0%BE%D0%B4
← →
xayam © (2011-09-02 22:15) [3]
> *кое-где i бывало
знаковым?
← →
asails (2011-09-02 23:33) [4]
> xayam © (02.09.11 22:15) [3]
Не. Именно беззнаковым... Тогда да - грабли могут быть.
← →
Германн © (2011-09-03 01:15) [5]Если форматирование есть, значит не всё ещё потеряно. :)
← →
Ega23 © (2011-09-03 10:05) [6]Или пример на pascal:
var
i: word;
begin
for i:=0 to List1.Count-1 do
ShowMessage(List1.Items[i]);
...
Если в списке было 0 элементов, компилятор выкидывал исключение о недопустимом индексе.
В данном случае из-за того, что i беззнакового типа, число List1.Count — 1, равное минус единице, автоматом преобразовывалось к тому же типу, что i, и становилось равным $FFFF. То есть данный код при пустом списке эквивалентен for i := 0 to $FFFF do… То есть будет пытаться перебрать ВСЕ значения i от 0 до $FFFF, выдав ошибку на первом же из них.
← →
Дмитрий С © (2011-09-03 11:23) [7]Вырывать код из контекста и говорить что он кривой имхо плохо.
P.S.
К тому же мы уже знаем, что
if somebool = false then
и
if not somebool then
это не одно и то же :)
← →
DiamondShark © (2011-09-03 11:29) [8]
> for i:=0 to List1.Count-1 do
Must сдохнуть в диких корчах.
foreach (var elt in List1)
{
...
}
i, Count, 0, -1, Items[i], знаки, беззнаки -- это всё информационный мусор.
Правда, олдскульным кодерам, до сих пор фапающим на то, как они фортрановский код вручную перфорировали на карты пять километров в гору зимой, весь этот булшит необходим для надрачивания ЧСВ.
← →
Дмитрий С © (2011-09-03 11:42) [9]
> DiamondShark © (03.09.11 11:29) [8]
Ахаха) А если надо все кроме первого или последнего элемента перечислить или каждый второй.
← →
_Юрий (2011-09-03 11:56) [10]
> http://lurkmore.ru/%D0%91%D1%8B%D0%B4%D0%BB%D0%BE%D0%BA%D0%BE%D0%B4
Статья чуть менее чем полностью состоит их взаимоисключающих параграфов
← →
uw © (2011-09-03 11:58) [11]Дмитрий С © (03.09.11 11:23) [7]
Когда не одно и то же - это и есть кривой код.
← →
_Юрий (2011-09-03 12:03) [12]
> Ахаха) А если надо все кроме первого или последнего элемента
> перечислить или каждый второй.
Вот интересно, для чего может понадобиться перечислить все кроме первого и последнего?
← →
Дмитрий С © (2011-09-03 12:09) [13]
> Вот интересно, для чего может понадобиться перечислить все
> кроме первого и последнего?
Ну это сам придумаешь, я уверен.
← →
Юрий Зотов © (2011-09-03 12:27) [14]
> Дмитрий С © (03.09.11 11:42) [9]
> А если надо все кроме первого или последнего элемента
> перечислить или каждый второй.
Тогда "олдскульные кодеры, до сих пор фапающие на то, как они фортрановский код вручную перфорировали на карты пять километров в гору зимой" делают это легко и просто. На автопилоте. И многое другое они тоже делают на автопилоте.
А вот скороспелки, ничего, кроме "надроченного ЧСВ", за плечами реально не имеющие, в таких случаях пишут что-то вроде сабжа.
LOL
← →
Virgo_Style © (2011-09-03 12:30) [15]
> олдскульным кодерам
вот не надо этих... инсинуаций. Новые технологии и приемы нам совсем не чужды.
Например, очень удобно написать процедуру с параметром - анонимной процедурой, чтобы первая заворачивала вторую в try-except end.
Такой процедуре очень удобно передавать завернутые в анонимную процедуру StrToInt или там деление x на y в том случае, если y может оказаться нулем.
← →
_Юрий (2011-09-03 12:32) [16]
> Ну это сам придумаешь, я уверен.
Да вот как то не придумывается.
Каждый второй - еще может и придумаю, а тут - нет.
В общем то, в 99 процентах случаев детали реализации итератора не интересуют вовсе, то бишь таки да, информационный мусор
← →
DiamondShark © (2011-09-03 13:01) [17]
> Дмитрий С © (03.09.11 11:42) [9]
> Ахаха) А если надо все кроме первого или последнего элемента перечислить или каждый второй.
А ещё круче, если надо чтобы перечисляемые индексы образовывали ряд Фибоначчи.
Ведь очевидно же, что линейный просмотр списка -- самый редкоиспользуемый сценарий. Гораздо чаще списки просматриваются со второго по предпоследний задом-наперёд в шахматном порядке.
> Юрий Зотов © (03.09.11 12:27) [14]
> делают это легко и просто. На автопилоте.
Покажите код, перечисляющий элементы TList, кроме первого и последнего.
← →
DiamondShark © (2011-09-03 13:04) [18]
> Virgo_Style © (03.09.11 12:30) [15]
А что делает процедура-обёртка, если игрек таки ноль?
← →
Virgo_Style © (2011-09-03 13:21) [19]
> А что делает процедура-обёртка, если игрек таки ноль?
Примерно то же, что иtry
something:=x/y;
except
end;
, я полагаю.
← →
Юрий Зотов © (2011-09-03 13:33) [20]
> DiamondShark © (03.09.11 13:01) [17]
> Покажите код, перечисляющий элементы TList, кроме первого
> и последнего.
Это шутка такая?
Поимка ручного льва в пустыне Сахара предоставляется читателю в качестве самостоятельного упражнения.
← →
DiamondShark © (2011-09-03 13:43) [21]
> Virgo_Style © (03.09.11 13:21) [19]
facepalm.jpg
> Юрий Зотов © (03.09.11 13:33) [20]
> Это шутка такая?
Нет.
А почему вы спрашиваете?
← →
Anatoly Podgoretsky © (2011-09-03 14:57) [22]> _Юрий (03.09.2011 12:03:12) [12]
Тогда for I:= 7 to 13
← →
Кто б сомневался © (2011-09-03 15:00) [23]А вас что смущает именно проверка на ноль (хотя я довольно часто их делаю - т.к. необходимо, но здесь она не нужна конечно), а остальное типа пойдет?
Меня смущает то, что он вообще не продуман.
Я бы его переделал так:
if not somebool then exit;
for i:=0 to List.Count - 1 do
begin
if fileexists(List.[i] ) then
DeleteFile( List[i] );
< здесь можно обработку ошибок сделать на delete file, но смысла нет
end;
>>Покажите код, перечисляющий элементы TList, кроме первого и последнего.
Поражаюсь просто.
For i := 1 to Count - 2 do
Ну и проверки соответствующие на наличие этого диапазона.
← →
uw © (2011-09-03 15:08) [24]Юрий Зотов © (03.09.11 13:33) [20]
> DiamondShark © (03.09.11 13:01) [17]
> Покажите код, перечисляющий элементы TList, кроме первого
> и последнего.
Это шутка такая?
Поимка ручного льва в пустыне Сахара предоставляется читателю в качестве самостоятельного упражнения.
А это уж точно шутка, я полагаю. Во всяком случае, "метод" поиска льва в пустыне всегда считался шуткой :-)
← →
uw © (2011-09-03 15:10) [25]Кто б сомневался © (03.09.11 15:00) [23]
Пожалуй, и fileexists ни к чему, а?
← →
Anatoly Podgoretsky © (2011-09-03 15:10) [26]> Кто б сомневался (03.09.2011 15:00:23) [23]
разве Count - 2 не есть проверка на наличие этого на наличие
← →
Кто б сомневался © (2011-09-03 15:20) [27]
> Пожалуй, и fileexists ни к чему, а?
Да верно. Ни к чему.
← →
Кто б сомневался © (2011-09-03 15:23) [28]if not somebool then exit;
for i:=0 to List.Count - 1 do
if not DeleteFile( List[i] ) then
raise exception ... или Result :=
← →
uw © (2011-09-03 15:28) [29]Кто б сомневался © (03.09.11 15:23) [28]
if not somebool then exit;
for i:=0 to List.Count - 1 do
if not DeleteFile( List[i] ) then
raise exception ... или Result :=
Я думаю, эту проблему можно решить более конкретно:for i:=0 to List.Count - 1 do
if not DeleteFile( List[i] ) then
ОтказатьсяОтИдеиУдаленияФайлаКоторыйНиФигаНеУдаляетсяНиФига;
← →
uw © (2011-09-03 15:28) [30]Кто б сомневался © (03.09.11 15:23) [28]
if not somebool then exit;
for i:=0 to List.Count - 1 do
if not DeleteFile( List[i] ) then
raise exception ... или Result :=
Я думаю, эту проблему можно решить более конкретно:for i:=0 to List.Count - 1 do
if not DeleteFile( List[i] ) then
ОтказатьсяОтИдеиУдаленияФайлаКоторыйНиФигаНеУдаляетсяНиФига;
← →
Кто б сомневался © (2011-09-03 15:31) [31]
> uw © (03.09.11 15:28) [30]
Не то.
А если это файл менеджер - юзер нажмет удалить а файл не удалиться?
Юзер начнет истеречить.
Юзеру нужно показать причину.
← →
uw © (2011-09-03 15:32) [32]Если у юзера не работает ОС, то ему остаётся только предложить удавиться. Но как это сделать, если у юзера не работает ОС?
← →
uw © (2011-09-03 15:33) [33]Хотя да. Такое может быть.
← →
Кто б сомневался © (2011-09-03 16:24) [34]
> uw © (03.09.11 15:32) [32]
Файл может не удаляться по нескольким причинам.
Он может открыт другой программой, либо у текущего юзера просто нет прав на удаление.
Предлагаешь юзеру гадать над каждый файлом?
← →
_Юрий (2011-09-03 16:30) [35]Не совсем олдскульному программеру решение данной задачи видится примерно так:
if (someBool)
list.ForEach(x => DeleteFile(x));
← →
* © (2011-09-03 18:11) [36]есть чем статью на лурке пополнить, да
← →
uw © (2011-09-03 19:28) [37]Кто б сомневался © (03.09.11 16:24) [34]
Файл может не удаляться по нескольким причинам.
Он может открыт другой программой, либо у текущего юзера просто нет прав на удаление.
Предлагаешь юзеру гадать над каждый файлом?
Да я уже согласился, честно. В [33].
← →
* © (2011-09-03 20:40) [38]
> _Юрий (03.09.11 16:30) [35]
как раз лисп изобрели заново :-)
← →
_Юрий (2011-09-04 14:00) [39]
> * © (03.09.11 20:40) [38]
Видимо, есть не только старая школа, но еще и древняя
← →
TUser © (2011-09-04 21:16) [40]А зачем делают переменную в цикле беззнакового типа? Приключений в жизни мало?
Страницы: 1 2 вся ветка
Форум: "Прочее";
Текущий архив: 2011.12.25;
Скачать: [xml.tar.bz2];
Память: 0.55 MB
Время: 0.005 c