Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 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.49 MB
Время: 3.07 c
4-1093518577
D3viL
2004-08-26 15:09
2004.10.03
КАК УЗНАТЬ СЕРИЙНИК HDD?


9-1086474625
RyDmi
2004-06-06 02:30
2004.10.03
Работа с видеокартой


3-1094023623
Алексей
2004-09-01 11:27
2004.10.03
Запрос 2 таблицам


1-1095221325
Sirus
2004-09-15 08:08
2004.10.03
Преимущества TDataModule


1-1095679598
Krot
2004-09-20 15:26
2004.10.03
Вопрос по реестру в WinXP(проблемы с удалением параметра)





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский