|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
17.02.2014, 19:12 | #1 |
Форумчанин
Регистрация: 01.11.2012
Сообщений: 770
|
case of - Too many local constants. Use shorter procedures
Код:
Код:
Код:
Последний раз редактировалось FleXik; 17.02.2014 в 19:15. |
17.02.2014, 19:15 | #2 |
Заблокирован
Регистрация: 31.03.2011
Сообщений: 976
|
Плодить темы прекращай.
|
17.02.2014, 19:56 | #3 |
personality
Старожил
Регистрация: 28.04.2009
Сообщений: 2,882
|
Я бы советовал уйти в горы постигать дзен. Программирование, очевидно, не Ваше.
Любой человек увидев что для задачи требуется труд, дурной и монотонный, который как раз и должна выполнять машина, сообразит, что _тут что-то не так_ и сей труд надо поручить машине, а не будет сам сидеть и как обезьянка пытаться добиться своего самым тупым способом, чего бы оно не стоило, вместо того, чтобы применить голову. Вашему способу даже есть официальное название - китайский код. Ваша задача (если её правильно можно понять, см. опять же сагу о xyz) решается несколькими способами. Во-первых, файл, в нём лежит массив данных по индексам комбобокса. читаете файл в массив потом по индексу подставляете значение. Во-вторых, массив в коде, одной константой. Дельфи Вам прямо говорит о переизбытке локальных констант, т.к. любая строка или число в коде процедуры уже является константой, просто объявленной неявно. (надо же программе как-то хранить информацию о том как производить операции - вот и хранит в локальных константах). То, что на Ваш взгляд кажется сложным из-за разных условий по комбобоксам, на самом деле лишь вопрос организации структуры хранения, например можно дополнительно хранить индекс другого комбобокса постоянно (тот что для более "высокого" кейса используется) или же озаботиться структурой данных "дерево" и сделать через неё, а уж готовую структуру можно опять же залить в файл или ещё как. Ещё один способ - хранить в базе данных, тогда загрузку в комбобоксы можно сделать полуавтоматической (через датасеты), и сопоставление нужных данных нужным индексам будет браться из базы. Есть ещё один волшебный способ, но его сложно будет Вам реализовать - полиморфизм на классах, в нём даже кейсы не понядобятся, индексы комбобоксов будут определяющими данными для построения нужных экземпляров, которые и будут производить дальнейшую Вашу работу (которую Вы опять же скрыли, по канонам Саги) Последний раз редактировалось phomm; 17.02.2014 в 19:58. |
17.02.2014, 20:05 | #4 |
Форумчанин
Регистрация: 01.11.2012
Сообщений: 770
|
phomm, понимаете, код переписываю уже второй раз (3-4 дня занимает один раз переписать код т.к все значения задаются вручную), или по вашему я должен год над этой задачей сидеть или может лет двадцать? я и гуглил но нигде толком ничего не пишут, этот форум а уж тем более раздел и создан для того чтобы помогать друг другу, все индивидуально, никто никого помогать не заставляет.
|
17.02.2014, 20:17 | #5 |
Форумчанин
Регистрация: 11.03.2011
Сообщений: 426
|
Так вам же объяснили, что такие вещи лучше не в коде писать, а во внешних хранилищах, хотя бы в том же Combobox-е числовое значение можно сохранять вместе со строками, как объекты. Лучше подумайте над организацией программы, а не над трёхдневном написании одного и того же алгоритма.
|
17.02.2014, 20:29 | #6 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
не хотелось бы поддерживать Вас в вашему упорном желании писать индусский код, но, с другой стороны, жалко, что Вы пытаетесь лбом прошибить стенку, даже не понимая, что для этого давно уже придумали другие средства....
короче, создайте ОТДЕЛЬНЫЙ модуль (например, File - New... Unit... ) и вынесите свой код туда, например, в функцию: Код:
и можно будет писать так: Код:
но вообще, Вы абсолютно зря не хотите переделать свой код так, как это положено! Перечитывайте пост #3 и #5 в данной теме до ПОЛНОГО просветления. Если что-то непонятно - спрашивайте совета. И переписывать код в нормальный можно с помощью автоматизации - в полуавтоматическом режиме (макросы и обработку текста программы никто не отменял). Код:
Последний раз редактировалось Serge_Bliznykov; 17.02.2014 в 20:32. |
17.02.2014, 20:36 | #7 |
Форумчанин
Регистрация: 01.11.2012
Сообщений: 770
|
Serge_Bliznykov, спасибо.
Serge_Bliznykov, сейчас буду пробовать, код ясен и понятен, спасибо, просто некоторые здесь пишут заумными формулировками которые не всегда мне понятны. Я не обижаюсь, а так должно получиться конечно, я и раньше работал с функциями просто руки не доходили до написания их самому... Serge_Bliznykov, проверил, идеально работает, какраз прям в точку, то что надо, спасибо огромное Последний раз редактировалось FleXik; 17.02.2014 в 21:11. |
17.02.2014, 20:39 | #8 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
Пожалуйста.
Получилось? И не обижайтесь на правду, все мы когда-то были новичками.. Если нужна помощь(хоть методологическая, хоть практическая) в переработке вашего кода в более-менее нормальный - обращайтесь! |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Too many local constants. Use shorter procedures | FleXik | Общие вопросы Delphi | 22 | 12.02.2014 13:56 |
thread-local storage | 220Volt | Общие вопросы C/C++ | 4 | 13.08.2013 20:12 |
Перемещение из case 1 в case 2(switch(), язык Си) | Павел_95 | Помощь студентам | 13 | 11.01.2013 14:18 |
Delphi7 создание формы Runtime, constants cannot be used as open array arguments | BoozZzilla | Помощь студентам | 2 | 29.03.2011 17:27 |