|
|
|
Подскажите вариант CASE ... OF с условиями
|
|||
|---|---|---|---|
|
#18+
На практике встречается длинная цепочка операторов: If () Then Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. Когда более 10 условий, то код становится трудно-читаемым. К сожалению case () of здесь нельзя использовать, т.к. условия - вычисляемые. Уважаемые гуру, как вы оформляете такой Delphi код? Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2019, 11:06 |
|
||
|
Подскажите вариант CASE ... OF с условиями
|
|||
|---|---|---|---|
|
#18+
Оформляй без сдвига Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2019, 11:09 |
|
||
|
Подскажите вариант CASE ... OF с условиями
|
|||
|---|---|---|---|
|
#18+
Artem.1stт.к. условия - вычисляемые. Например? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2019, 11:09 |
|
||
|
Подскажите вариант CASE ... OF с условиями
|
|||
|---|---|---|---|
|
#18+
Artem.1st, Покажите результаты условия ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2019, 11:09 |
|
||
|
Подскажите вариант CASE ... OF с условиями
|
|||
|---|---|---|---|
|
#18+
Artem.1st, Я не гуру, но как-то так: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2019, 11:13 |
|
||
|
Подскажите вариант CASE ... OF с условиями
|
|||
|---|---|---|---|
|
#18+
wadmanArtem.1stт.к. условия - вычисляемые. Например? Код: pascal 1. 2. 3. 4. 5. 6. 7. Это абстрактный пример, а у меня все сложнее. В help написано, что сase () of требует констатнты и только перечислимого типа, т.е. даже String нельзя использовать. И как бороться с такими конструкциями? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2019, 11:17 |
|
||
|
Подскажите вариант CASE ... OF с условиями
|
|||
|---|---|---|---|
|
#18+
Artem.1st, Ну если очень хочеться именно case .. of то можно написать функцию приведения в которой будут те же if'ы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2019, 11:20 |
|
||
|
Подскажите вариант CASE ... OF с условиями
|
|||
|---|---|---|---|
|
#18+
Как-то так ... Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2019, 11:26 |
|
||
|
Подскажите вариант CASE ... OF с условиями
|
|||
|---|---|---|---|
|
#18+
Код: pascal 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2019, 11:27 |
|
||
|
Подскажите вариант CASE ... OF с условиями
|
|||
|---|---|---|---|
|
#18+
zinpubКак-то так ... Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. Hint: "Result - может не вернуть значение." ОК. Закроем на это глаза, но зачем 8(восемь) строк, когда достаточно всего 2(две) строки: Код: pascal 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2019, 12:05 |
|
||
|
Подскажите вариант CASE ... OF с условиями
|
|||
|---|---|---|---|
|
#18+
High.Programer, 1. Ну это ж прототип... 2. Result после for не имеет гарантированного значения... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2019, 12:07 |
|
||
|
Подскажите вариант CASE ... OF с условиями
|
|||
|---|---|---|---|
|
#18+
High.ProgramerОК. Закроем на это глаза, но зачем 8(восемь) строк, когда достаточно всего 2(две) строки: Код: pascal 1. 2. 3. 4. 5. Надо ещё в конце (и в тип) добавить что-то вроде Код: pascal 1. иначе может нежданчик случиться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2019, 12:08 |
|
||
|
Подскажите вариант CASE ... OF с условиями
|
|||
|---|---|---|---|
|
#18+
выше была очепятка. Оператор FOR...IN доступен с Delphi 2005: Код: pascal 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2019, 12:09 |
|
||
|
Подскажите вариант CASE ... OF с условиями
|
|||
|---|---|---|---|
|
#18+
zinpub2. Result после for не имеет гарантированного значения... Я не проверял, но помню, что это переменная цикла после индексного перебора For i:=0 to Count-1 do имеет неопределенное значения. А в нашем случае не индексный перебор, а последовательный(через энумератор) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2019, 12:15 |
|
||
|
Подскажите вариант CASE ... OF с условиями
|
|||
|---|---|---|---|
|
#18+
Зачем велосипеды? IndexStr есть же. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2019, 12:22 |
|
||
|
Подскажите вариант CASE ... OF с условиями
|
|||
|---|---|---|---|
|
#18+
High.Programer, А какая разница? Что происходит с итератором - мало предсказуемо... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2019, 12:28 |
|
||
|
Подскажите вариант CASE ... OF с условиями
|
|||
|---|---|---|---|
|
#18+
makhaonЗачем велосипеды? IndexStr есть же. Для данного случая да, но если логика усложнится... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2019, 12:29 |
|
||
|
Подскажите вариант CASE ... OF с условиями
|
|||
|---|---|---|---|
|
#18+
High.Programer , For..In использвоать боюсь, т.к. в детстве не приучили :-) zinpub, DimaBr , спасибо за идею. Проблема String для Case..OF решается, хотя для более сложных условий придется выстраивать многочисленные if then. Похоже, не только в Delphi, я посмотрел в других языках C++, Java также "Switch" не помогает :-( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2019, 12:31 |
|
||
|
Подскажите вариант CASE ... OF с условиями
|
|||
|---|---|---|---|
|
#18+
Как-то раз вот так сделал: case Ord(<Усл1>) * 1 + Ord(<Усл2>) * 2 + Ord(<Усл3>) * 3 of 1:... 2:... 3;... end; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2019, 12:57 |
|
||
|
Подскажите вариант CASE ... OF с условиями
|
|||
|---|---|---|---|
|
#18+
Artem.1stкак вы оформляете такой Delphi код? Через список TList<TWorkerClass> или TObjectDictionary<string,TWorkerClass> Код: pascal 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2019, 13:37 |
|
||
|
Подскажите вариант CASE ... OF с условиями
|
|||
|---|---|---|---|
|
#18+
И зачем двойной доступ в Dictionary? Код: pascal 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2019, 14:22 |
|
||
|
Подскажите вариант CASE ... OF с условиями
|
|||
|---|---|---|---|
|
#18+
Michael Longneck, Тогда уж так. Код: pascal 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2019, 14:44 |
|
||
|
Подскажите вариант CASE ... OF с условиями
|
|||
|---|---|---|---|
|
#18+
Чё уж? Давайте пировать! Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2019, 15:58 |
|
||
|
Подскажите вариант CASE ... OF с условиями
|
|||
|---|---|---|---|
|
#18+
Под 64 битную платформу подправил Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2019, 16:00 |
|
||
|
Подскажите вариант CASE ... OF с условиями
|
|||
|---|---|---|---|
|
#18+
Artem.1stНа практике встречается длинная цепочка операторов: If () Then Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. Уважаемые гуру, как вы оформляете такой Delphi код? Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. Либо, если позволяет код, вынести в подпрограмму, тогда: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. Либо, если не получается, обернуть в try-finally Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2019, 17:32 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39796273&tid=2039604]: |
0ms |
get settings: |
5ms |
get forum list: |
8ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
142ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
36ms |
get tp. blocked users: |
1ms |
| others: | 198ms |
| total: | 402ms |

| 0 / 0 |
