Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2011.12.25;
Скачать: CL | DM;

Вниз

программирование 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;
Скачать: CL | DM;

Наверх




Память: 0.57 MB
Время: 0.014 c
2-1315479852
dEN
2011-09-08 15:04
2011.12.25
Удалить определенные символы в строке


15-1315402684
Jeer
2011-09-07 17:38
2011.12.25
Зачетный HTML 5


4-1253095828
roughneck
2009-09-16 14:10
2011.12.25
Перехват WM_QUERYENDSESSION


15-1315083828
Knight
2011-09-04 01:03
2011.12.25
Алгоритм выбора случайного элемента...


8-1219696911
Zilog
2008-08-26 00:41
2011.12.25
Как узнать, насоклько один цвет отличается от другого (RGB)