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

Вниз

Кака лучше?   Найти похожие ветки 

 
Anatoly Podgoretsky ©   (2012-04-17 11:20) [40]

> Sha  (17.04.2012 11:17:39)  [39]

Автор является последней инстанцией, как писать, что использовать, усложнять
или нет
Это я не обсуждаю, только приведеный код.


 
Sha ©   (2012-04-17 11:36) [41]

Да с кодом и так все ясно. Все придется переписать,
если вдруг приспичит сделать врхнюю границу массива переменной.


 
CRLF   (2012-04-17 11:40) [42]


> приводит нас либо к усложнению кода
Некоторое усложнение, конечно, есть, но...

type
TNumber= 1..100;
TRooms= array[TNumber] of integer;

function Volume(const Rooms: TRooms; First: TNumber; Count: integer): integer;

по большому счёту некорректен. Если уж типизируем, то нужно

type
TNumber= 1..Max;
TQuantity = 0..Max;
TRooms= array [TNumber] of integer;

function Volume(const Rooms: TRooms; First: TNumber; Count: TQuantity): integer;
var
Current: TNumber;
begin
 if First + Count > Max then
   raise ...;
 Result := 0;
 for Current := First to Pred(First + Count) do
   Result := Result + Rooms[Current];
end;


 
Anatoly Podgoretsky ©   (2012-04-17 11:40) [43]


> Sha ©   (17.04.12 11:36) [41]
> если вдруг приспичит сделать врхнюю границу массива переменной.

Не понял, поясни, а то я до сих пор считал, что нельзя определить массив, с граница с переменными.


 
Sha ©   (2012-04-17 11:49) [44]

> Anatoly Podgoretsky ©   (17.04.12 11:40) [43]

Конечно нельзя, поэтому и придется переписать


 
Sha ©   (2012-04-17 11:55) [45]

> CRLF   (17.04.12 11:40) [42]

Попался )
Засада там же: Count=0


 
CRLF   (2012-04-17 12:06) [46]

Попался в чём? Цикл не выполнится ни разу. То, что Pred(First + Count) будет иметь недопустимое для TNumber значение, — имеет ли смысл об этом говорить, если присвоения не будет никогда?


 
Sha ©   (2012-04-17 12:09) [47]

Вот-вот.
А компилятор, собака, об этом знает, но ERangeError поднимает.
Но мы бум молчать.


 
CRLF   (2012-04-17 12:11) [48]


> А компилятор, собака, об этом знает, но ERangeError поднимает.
Опять же, прогнал твой пример из [28] с моими доработками, никакого RangeError нету.


 
Sha ©   (2012-04-17 13:27) [49]

> CRLF   (17.04.12 12:11) [48]

Проверил на D7

Optimization Off
RangeChecking On
OverFlowChecking On

ERangeError есть


 
CRLF   (2012-04-17 13:50) [50]

Да, действительно, с range checking проблема есть.


 
Sha ©   (2012-04-17 13:57) [51]

Во.
И придется поизвращаться, чтобы этого избежать.
Спрашивается, нафига было типизировать?


 
CRLF   (2012-04-17 14:03) [52]

А в чём извращение? В добавлении одного if (лишнего, но, в принципе, повышающего читаемость)?


 
Sha ©   (2012-04-17 14:07) [53]

Спорим, одного не хватит?

P.S. меня бесят все эти if и raise...


 
Sha ©   (2012-04-17 14:10) [54]

Это не тот код, чтобы думать. Тут надо струячить. Думать надо редко.
При сплошном типизировании приходится думать непрерывно. Думалка может сломаться.


 
CRLF   (2012-04-17 14:24) [55]


> P.S. меня бесят все эти if и raise...
Неужели лучше, если через эн лет в проверенном годами коде изредка станет возникать ав по причине выхода за пределы массива?


 
Sha ©   (2012-04-17 14:26) [56]

разве эти вещи как-то связаны?


 
CRLF   (2012-04-17 14:35) [57]

А разве нет? Когда-нибудь First + Count станет больше High(Array), массив к тому времени будет динамическим и без лишней типизации, в 99% выход за пределы массива будет прощаться, но раз в полгода будет ав... :-)


> Это не тот код, чтобы думать. Тут надо струячить. Думать
> надо редко.
Ну да, это ведь "форумные этюды", а не реальная задача, в реальной вряд ли кто-то кроме преподавателя информатики станет без нужды поддиапазоны выделять.


 
Sha ©   (2012-04-17 14:40) [58]

> CRLF   (17.04.12 14:35) [57]
> Когда-нибудь First + Count станет больше High(Array)

есть if и if, почувствуй разницу

> в реальной вряд ли кто-то кроме преподавателя информатики
> станет без нужды поддиапазоны выделять

опять же (с) ЮЗ:
любую полезную вещь можно превратить в бесполезную (или даже вредную),
доведя ее до абсурда.



Страницы: 1 2 вся ветка

Текущий архив: 2013.03.22;
Скачать: CL | DM;

Наверх




Память: 0.57 MB
Время: 0.228 c
15-1337084520
Max
2012-05-15 16:22
2013.03.22
аналог AsProtect


15-1351629002
Юрий
2012-10-31 00:30
2013.03.22
С днем рождения ! 31 октября 2012 среда


2-1341986411
NBAH19901
2012-07-11 10:00
2013.03.22
Парсинг Json в delphi


15-1347565047
Artem
2012-09-13 23:37
2013.03.22
Сегодня выбрал тему дипломный работы.


15-1330115402
Юрий
2012-02-25 00:30
2013.03.22
С днем рождения ! 25 февраля 2012 суббота