|
|
|
instanceof есть сомнения
|
|||
|---|---|---|---|
|
#18+
Есть супер-пупер проект, но в нем вижу больше тысячи instanceof и полторы тысячи проверок на null. Вопрос: можно ли уже по этим признакам перестать считать проект суперским? Или я ошибаюсь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.05.2013, 11:08:49 |
|
||
|
instanceof есть сомнения
|
|||
|---|---|---|---|
|
#18+
instanceof скорее всего свидетльствует о кривом дизайне. Потому что он появляется там где нужно было использовать полиморфизм. А уж если это массовый подход в десятках класса, то архитектуры у кода нет совсем. вездесущие проверки на null - палка о двух концах. С одной стороны, да. Это тоже признак не самого лучшего кода. С другой стороны, не так много есть действительно работающих альтернатив. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.05.2013, 11:53:46 |
|
||
|
instanceof есть сомнения
|
|||
|---|---|---|---|
|
#18+
Первая моя мысль была тоже о кривой архитектуре, но какая-то нерешительная мысль, не люблю критиковать и обижать людей, всегда присутствует сомнение: может я просто не понимаю гениальной задумки архитектора? Вот и ищу подтверждения незаинтересованной публики с некоторым опытом разработки. Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.05.2013, 12:10:45 |
|
||
|
instanceof есть сомнения
|
|||
|---|---|---|---|
|
#18+
Массовые instanceof не встречал, а вот проверки на null в последнее время сам стараюсь расставлять везде, где есть хоть малейшие сомнения. А то смотришь логи продакшен сервака, а там неведомые NPE, которые непонятно откуда берутся, так что лучше явная проверка на null и выкидываем адекватное исключение, чтобы потом можно было размотать, откуда эти null'овые объекты берутся. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.05.2013, 14:50:03 |
|
||
|
instanceof есть сомнения
|
|||
|---|---|---|---|
|
#18+
Blazkowiczinstanceof скорее всего свидетльствует о кривом дизайне. Потому что он появляется там где нужно было использовать полиморфизм. Я знаю два исключения: 1. Проект является фрейморком, в котором очень много завязано на рефлексию (правда, не уверен насчет именно instanceof); 2. Реализация паттерна visitor удобно делается через instanceof. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.05.2013, 15:34:36 |
|
||
|
instanceof есть сомнения
|
|||
|---|---|---|---|
|
#18+
Leonidv1. Проект является фрейморком, в котором очень много завязано на рефлексию (правда, не уверен насчет именно instanceof); Это единичные случаи. Топикастер говорит о массовом использовании. Leonidv2. Реализация паттерна visitor удобно делается через instanceof. Покажи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.05.2013, 15:50:26 |
|
||
|
instanceof есть сомнения
|
|||
|---|---|---|---|
|
#18+
Идея такая: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. Насколько я понимаю, чистое ООП решение заключается в том, что каждый имет метод getType. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.05.2013, 21:25:26 |
|
||
|
instanceof есть сомнения
|
|||
|---|---|---|---|
|
#18+
Недоперепроектировали LeonidvИдея такая: Код: java 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.05.2013, 21:39:58 |
|
||
|
instanceof есть сомнения
|
|||
|---|---|---|---|
|
#18+
LeonidvИдея такая: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. Насколько я понимаю, чистое ООП решение заключается в том, что каждый имет метод getType. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Чистое ООП решение: Код: java 1. 2. 3. 4. 5. А какой там Тип у ноды должно быть пофиг. Полиморфизм рулит и педалит. <:o) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.05.2013, 07:54:08 |
|
||
|
instanceof есть сомнения
|
|||
|---|---|---|---|
|
#18+
либо же, там высокооптимизированный код. способ с istanceof работает раз в 10 быстрей полиморфизма. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.05.2013, 09:12:47 |
|
||
|
instanceof есть сомнения
|
|||
|---|---|---|---|
|
#18+
chabapokлибо же, там высокооптимизированный код. способ с istanceof работает раз в 10 быстрей полиморфизма. Вместо с даункастингом? Что-то не верится ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.05.2013, 09:49:08 |
|
||
|
instanceof есть сомнения
|
|||
|---|---|---|---|
|
#18+
Blazkowiczchabapokлибо же, там высокооптимизированный код. способ с istanceof работает раз в 10 быстрей полиморфизма. Вместо с даункастингом? Что-то не верится сам был удивлен. Сейчас наверное вы попросите предоставить код, которым оно тестилось. Этот код утерян, т.к. тестил давно, но вот набросал на скору руку аналог. Полиморфизм получается вдвое дольше. При этом если прибить класс С, то полиморфизм будет сравним по времени с instanceof, т.к. jvm умеет делать какую-то хитрую оптимизацию когда только 2 подкласса. Код: java 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. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. 174. 175. 176. 177. 178. 179. 180. 181. 182. 183. 184. 185. 186. И это оно еще быстро работает. Когда я тестил, то у меня ооп получалось раз в 10 медленей (видимо старая jvm), но этот код утерян. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.05.2013, 23:10:51 |
|
||
|
instanceof есть сомнения
|
|||
|---|---|---|---|
|
#18+
кстати, jvm вполне может видеть (в том смысле, что я не вижу препятствий против такой оптимизации), что кастинг осуществляется внутри проверки instanceof и второй раз такую проверку не делать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.05.2013, 23:16:29 |
|
||
|
instanceof есть сомнения
|
|||
|---|---|---|---|
|
#18+
chabapokBlazkowiczпропущено... Вместо с даункастингом? Что-то не верится сам был удивлен. Сейчас наверное вы попросите предоставить код, которым оно тестилось. Этот код утерян, т.к. тестил давно, но вот набросал на скору руку аналог. Полиморфизм получается вдвое дольше. При этом если прибить класс С, то полиморфизм будет сравним по времени с instanceof, т.к. jvm умеет делать какую-то хитрую оптимизацию когда только 2 подкласса. И это оно еще быстро работает. Когда я тестил, то у меня ооп получалось раз в 10 медленей (видимо старая jvm), но этот код утерян. Вопрос конечно философский, что важнее время исполнения программы или скорость модификации программы :-) Лично я бы, вместо оптимизации выбрал бы упрощение кода. Просто когда вдруг понадобиться добавить классы D, E, F и пр. Причем программистами которые не с самого начала проекта (будем считать что прошло 1-2 поколения программиста), то поиск что-то вроде testInstanceOf(), testID() и testIsClass() может вылиться в увлекательное приключение как минимум на неделю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2013, 07:14:07 |
|
||
|
instanceof есть сомнения
|
|||
|---|---|---|---|
|
#18+
visitor не требует instanceof или каких либо проверок типа. Все делает компилятор: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. В целом если куча instanceof, то или унаследованный с Java <1.5 код, без дженериков, или таки архитектура кривая. Проверки на null хороши в assert на входе публичных методов, в остальных местах лучше пользоваться "специальными значениями". Например, для коллекции использовать пустую если нет результата. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2013, 08:44:00 |
|
||
|
instanceof есть сомнения
|
|||
|---|---|---|---|
|
#18+
mad_nazgulЧистое ООП решение: Код: java 1. 2. 3. 4. 5. А какой там Тип у ноды должно быть пофиг. Полиморфизм рулит и педалит. <:o) В Java так нельзя. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2013, 09:38:29 |
|
||
|
instanceof есть сомнения
|
|||
|---|---|---|---|
|
#18+
maytonНедоперепроектировали LeonidvИдея такая: Код: java 1. 2. 3. 4. 5. 6. 7. 8. Это сработает только в том случае, если порядок следования элементов в структуре нам не нужен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2013, 09:39:11 |
|
||
|
instanceof есть сомнения
|
|||
|---|---|---|---|
|
#18+
пролетевшийvisitor не требует instanceof или каких либо проверок типа. Все делает компилятор: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Красивое решение, спасибо. Есть недостаток, что элемент начинает заниматься еще и логикой перехода, но он не значительный и перевешывает бонусы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2013, 09:48:54 |
|
||
|
instanceof есть сомнения
|
|||
|---|---|---|---|
|
#18+
Leonidvmad_nazgulЧистое ООП решение: Код: java 1. 2. 3. 4. 5. А какой там Тип у ноды должно быть пофиг. Полиморфизм рулит и педалит. <:o) В Java так нельзя. Странно почему?! Во всех других ООП ЯП можно, а в Java нельзя. :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2013, 10:30:32 |
|
||
|
instanceof есть сомнения
|
|||
|---|---|---|---|
|
#18+
mad_nazgul, да, я тоже чего-то не понял. Чего там в Java нельзя? Итерировать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2013, 11:49:12 |
|
||
|
instanceof есть сомнения
|
|||
|---|---|---|---|
|
#18+
mad_nazgulВо всех других ООП ЯП можно, а в Java нельзя. :-) Не во всех есть dynamic dispatch. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2013, 19:54:02 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=38246445&tid=2129422]: |
0ms |
get settings: |
15ms |
get forum list: |
17ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
43ms |
get topic data: |
15ms |
get forum data: |
4ms |
get page messages: |
85ms |
get tp. blocked users: |
2ms |
| others: | 334ms |
| total: | 525ms |

| 0 / 0 |
