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

Вниз

Что более правильно: предопределённый массив или CASE?   Найти похожие ветки 

 
Prohodil Mimo ©   (2004-09-17 12:04) [0]

например :

Case PrSost of
  0: Label1.Caption:="zazaza";
  1: Label1.Caption:="lalala";
  2: Label1.Caption:="gygygy";
End;

или

S:Array[0..2] of String[6] = ("zazaza", "lalala", "gygygy");

Label1.Caption:=S[PrSost];

?


 
Johnmen ©   (2004-09-17 12:06) [1]

А что такое "более правильно" ?


 
Skyle ©   (2004-09-17 12:10) [2]


> Что более правильно

В данном случае подозреваю, что Более_правильно := Более_удобно;


 
Prohodil Mimo ©   (2004-09-17 12:11) [3]

что лучше использовать?


 
jack128 ©   (2004-09-17 12:14) [4]

Быстрее вариант с массивом. Да и, имхо, удобнее, хотя это уже дело вкуса..


 
Sandman25 ©   (2004-09-17 12:14) [5]

Label1.Caption:=S[PrSost];

property S[Index: Integer] read GetS;

В случае чего легко меняем GetS.


 
Prohodil Mimo ©   (2004-09-17 12:15) [6]

CASE - легче читать, но больше текста, особенно когда в одной процедуре их несколько.
А массив - меньше текста, но что-бы узнать его содержимое, надо подыматься наверх.

А вообще поставим вопрос так :
--- Кто что предпочитает? ---


 
Sandman25 ©   (2004-09-17 12:16) [7]

>CASE - легче читать, но больше текста, особенно когда в одной процедуре их несколько.

Ошибка кодирования. Потом нужно одно значение поменять на другое и приходится изменять 10 case-ов?


 
Prohodil Mimo ©   (2004-09-17 12:18) [8]

[5] Sandman25, Label - как пример, вместо него может быть и ячейка таблицы (Excel, StringGrid) или просто строка.


 
Prohodil Mimo ©   (2004-09-17 12:19) [9]

[7] Sandman25, я имел в виду разные значения.


 
Sandman25 ©   (2004-09-17 12:26) [10]

[9] Prohodil Mimo ©   (17.09.04 12:19)

Понял, извините.
Я бы завел перечислимые типы и array property, использующие эти типы в качестве индекса.


 
Игорь Шевченко ©   (2004-09-17 12:31) [11]


> что лучше использовать?


Я массив стараюсь использовать - строчек меньше писать.
Только с одной оговоркой:

type
 TFoo = (Foo1, Foo2, Foo3);

S:Array[TFoo] of String[6] = ("zazaza", "lalala", "gygygy");
Label1.Caption:=S[PrSost];


 
Prohodil Mimo ©   (2004-09-17 12:43) [12]

[10] Sandman25, это мне извиняться надо, что сразу всё не договорил.

[11] Игорь Шевченко, а почему так?


 
Verg ©   (2004-09-17 12:44) [13]


> S:Array[0..2] of String[6] = ("zazaza", "lalala", "gygygy");
>
> Label1.Caption:=S[PrSost];


if (PrSost >= low(S))  and
 (PrSost <= high(S)) then
 Label1.Caption:=S[PrSost]
else
 Label1.Caption := "Unknown";

case гибчее :)


 
DiamondShark ©   (2004-09-17 12:46) [14]

Главное в кейсе про покрытие всех вариантов не забыть, а с массивом -- про диапазон индекса.


 
Игорь Шевченко ©   (2004-09-17 12:48) [15]

Prohodil Mimo ©   (17.09.04 12:43) [12]


>  а почему так?


Строчек меньше


 
euru ©   (2004-09-17 13:22) [16]

>Verg ©   (17.09.04 12:44) [13]

В способе Игорь Шевченко ©   (17.09.04 12:31) [11] переменная PrSost: TFoo. Проверки на выход за границы масива использовать ненужно.


 
Mystic ©   (2004-09-17 13:22) [17]

CASE - легче читать

Вопрос спорный. Три элемента куда ни шло, а десять, пятнадцать, сто двадцать? Тем более, что значение конкретной строковой константы обычно несущественно для понимания кода. Поэтому CASE сожержит много избыточной информации, которая мешает читать. Мой выбор в пользу таблицы, внешних файлов, ...

Еще условную логику можно заменять полиморфизмом (в более сложных случаях).


 
Sandman25 ©   (2004-09-17 14:45) [18]

Case хуже тем, что есть несколько копий переменной, в которую происходит присваивание.
case
...
label1.caption :=
...
label1.caption :=
...
label1.caption :=

А если нужно вместо label1 написать label2?
А если нужно вместо label1 написать MyUnit.MyObject.MyProperty(MyParam)?
Таким образом при использовании case обязательно рекомендуется создать новую функцию.


 
esu   (2004-09-17 15:23) [19]

У case еще else есть.



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

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

Наверх




Память: 0.51 MB
Время: 0.025 c
14-1094835390
Логистик
2004-09-10 20:56
2004.10.03
Куда пропал mbo с пятничными задачами?


14-1095256320
QuasiLamo
2004-09-15 17:52
2004.10.03
Сколько стоит беспроводная сеть?


1-1095493907
lord vader
2004-09-18 11:51
2004.10.03
Вернуть ссылку на компоненту по её описанию в STRING-е


1-1095327137
Black
2004-09-16 13:32
2004.10.03
как узнать кол-во символов в текстовом файле?


4-1093114982
Thinker
2004-08-21 23:03
2004.10.03
Какая функция возвращает количество свободной оперативной памяти