Форум: "Потрепаться";
Текущий архив: 2004.10.03;
Скачать: [xml.tar.bz2];
ВнизЧто более правильно: предопределённый массив или 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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.044 c