Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 1 | 2 | 3 | 4 |

 

  Вопрос: Оператор( Добавлено: 20.10.09 16:10  

Автор вопроса:  UnDeAdZak

Ответить

  Ответы Всего ответов: 47  

Номер ответа: 16
Автор ответа:
 Smith



ICQ: adamis@list.ru 

Вопросов: 153
Ответов: 3632
 Профиль | | #16 Добавлено: 21.10.09 00:32
Ничего, что я сюда заглянул?
Посоветую Артёму заглянуть сюда...

Ответить

Номер ответа: 17
Автор ответа:
 BG(Алексей)



Вопросов: 26
Ответов: 295
 Профиль | | #17 Добавлено: 21.10.09 01:31
У меня тут проста такая фиговина в программке: у меня есть число с количеством знаков от 1 и до 5 и я должен какой цифры больше всего в числе.Я режу число с помощю функции mid(), вырезая по одному символу, а если в числе знаков меньше 5, оператор OnResumeNext выдавал мне нули заместо пустых мест, а это недопустимо.
Бля, дожились. Как вообще такое можно было придумать.
Полный пипец :)

Ответить

Номер ответа: 18
Автор ответа:
 AndreyMp



ICQ: 237822510 

Вопросов: 28
Ответов: 1182
 Профиль | | #18 Добавлено: 21.10.09 08:13
Бля, дожились. Как вообще такое можно было придумать.
Полный пипец
Эх UnDeAdZak, крепко ж обидел ты дотнетчиков. 50 стр. перебранки опять обеспечено. :=)

Ответить

Номер ответа: 19
Автор ответа:
 VβÐUηìt



Вопросов: 246
Ответов: 3333
 Web-сайт: смекаешь.рф
 Профиль | | #19
Добавлено: 21.10.09 08:48
Опять началось. Описывать ошибки в дотнете нету смысла, ибо On Error Resume Next реально рулит и ускоряет разработку программы.
Элементарнейший пример:
  1.  
  2. 'Функция удаляет из Text последний символ
  3. Sub Backspace()
  4. On Error Resume Next
  5. Text = Mid$(Text, 1, Len(Text)-1)
  6. End Sub


Если текст пустой то пофиг, ничего не произойдет, программа не вылетит и все будет дальше. И не надо производить никих обработок и т.п. И к чему писать Try/Cath и тратить свои силы? Лучше в это время продвинуть проект еще дальше в разработке. Хочешь отладить - закомментируй временно On Error Resume Next и все.

PS: И ниже много-много возмущений :):

Ответить

Номер ответа: 20
Автор ответа:
 __Pavel__



Вопросов: 29
Ответов: 284
 Web-сайт: ммм.сайта.НЕТ
 Профиль | | #20
Добавлено: 21.10.09 11:08
таааак... сейчас будет очень много матов :)))

Ответить

Номер ответа: 21
Автор ответа:
 Ra$cal



ICQ: 8068014 

Вопросов: 18
Ответов: 817
 Web-сайт: www.rascalspb.narod.ru
 Профиль | | #21
Добавлено: 21.10.09 22:03
Если текст пустой то пофиг, ничего не произойдет, программа не вылетит и все будет дальше. И не надо производить никих обработок и т.п. И к чему писать Try/Cath и тратить свои силы? Лучше в это время продвинуть проект еще дальше в разработке. Хочешь отладить - закомментируй временно On Error Resume Next и все.

феерично. а что будет если в функции несколько мест могут генерировать исключения? Вообще кодировать без защиты от ошибок - прямая и быстрая дорога к смерти проекта. Не стоит в себе развивать лень, благо для проверки требуется от силы 3-4 строки.

Ответить

Номер ответа: 22
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #22 Добавлено: 22.10.09 00:30
On Error Resume Next реально рулит и ускоряет разработку программы

афтар нуб и апазорился... ты рассуждаешь как полнейший ламер. Советую внимательней перечитать раздел "Обработка исключений". Если не дойдет - повторить чтение до полного просветления и признания собственной неправоты

Ответить

Номер ответа: 23
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #23 Добавлено: 22.10.09 10:40
VβР пишет:
Опять началось. Описывать ошибки в дотнете нету смысла, ибо On Error Resume Next реально рулит и ускоряет разработку программы.
Элементарнейший пример:
  
'Функция удаляет из Text последний символ

Sub Backspace()

On Error Resume Next

Text = Mid$(Text, 1, Len(Text)-1)

End Sub




Если текст пустой то пофиг, ничего не произойдет, программа не вылетит и все будет дальше. И не надо производить никих обработок и т.п. И к чему писать Try/Cath и тратить свои силы? Лучше в это время продвинуть проект еще дальше в разработке. Хочешь отладить - закомментируй временно On Error Resume Next и все.

Зачем же ужас такой?
Все .NET гораздо проще делается и без всяких On Error, одной стрчокой

  1.     Function Backspace(ByVal text As String)
  2.         Return If(text IsNot Nothing, Enumerable.ToArray(Of Char)(Enumerable.Where(Of Char)(text, Function(c, i) i < text.Length - 1)), "")
  3.     End Function

Ответить

Номер ответа: 24
Автор ответа:
 VβÐUηìt



Вопросов: 246
Ответов: 3333
 Web-сайт: смекаешь.рф
 Профиль | | #24
Добавлено: 22.10.09 11:12
  1. феерично. а что будет если в функции несколько мест могут генерировать исключения? Вообще кодировать без защиты от ошибок - прямая и быстрая дорога к смерти проекта. Не стоит в себе развивать лень, благо для проверки требуется от силы 3-4 строки.
  2.  


бла-бла-бла
У меня больше десяти проектов на этом сделано до конца, все работают, все довольны и все пучком. On Error Resume Next - нежная вещь, к ней нужно знать подход. :-P

Если на то пошло, можно вообще написать всю программу одной строчкой на дотнете и выделываться, что она написана одной строчкой. Посмотри наглядность мою и твою. Это во-первых. А во-вторых - я тебе привел простейший пример, а не представил проблему реализации удаления последнего символа в строчке. И в-третьих - ты становишься предсказуемым. Как и предыдущий оппонент.

Ответить

Номер ответа: 25
Автор ответа:
 Smith



ICQ: adamis@list.ru 

Вопросов: 153
Ответов: 3632
 Профиль | | #25 Добавлено: 22.10.09 13:14
Artyom пишет:
Крутые дядьки на одну функцию из 3 строк пишут 15 юнит-тестов

Прям так и на каждую??? Ну им наверное больше знаятся нечем...

Ответить

Номер ответа: 26
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #26 Добавлено: 22.10.09 14:08
VBD пишет:
Если на то пошло, можно вообще написать всю программу одной строчкой на дотнете и выделываться, что она написана одной строчкой. Посмотри наглядность мою и твою.

С непривычки сложно оценить вариант с LinQ и lambda-выражением.

Конечно все делается через проверку.

  1.     Function Backspace1(ByVal text As String)
  2.         On Error Resume Next
  3.         Return text.Remove(text.Length - 1)
  4.     End Function
  5.   
  6.     Function Backspace2(ByVal text As String)
  7.         If text.Length = 0 Then
  8.             Return ""
  9.         Else
  10.             Return text.Remove(text.Length - 1)
  11.         End If
  12.     End Function


Обе функции прогоняем на строке "1", количество итераций 100 000 000. Результат:
  1. Backspace1 100000000: 00:00:06.7723874
  2. Backspace2 100000000: 00:00:01.1840677


Путем несложных подсчетов получаем что вариант с проверкой работает почти в 6 раз быстрее чем вариант с On Error

Теперь прогоняем эти же функции на пустой стркое. Для первой функции с On Error количество итераций пришлось уменьшить на до 100 000. Результаты:
  1. Backspace1 100000: 00:00:08.0834624
  2. Backspace2 100000000: 00:00:00.2380136

Итог - на данной стркое обычная проверка работает в 34000 раза быстрее чем вариант с On Error.
Также можно заметить что на пустой строке Backspace2 работает быстрее чем на строке из 1 символа, и это объяснимо - если строка пустая, она сразу возвращается, над ней не проводятся опреации по удалению символа.

Данные корректны, можешь сам написать бенчмарк и получишь похожие результаты.

Как ты сам выразился, это протейший вариант. Что происходит на задачах, приближеных к реальным, можешь сам посчитать.



Вобщем что могу посоветовать.
Перестань считать себя крутым, выкинь на свалку VB6, скачай пару книжек для чайников, читай стандарты кодирования, слушай что говорят крутые дядьки

Ответить

Номер ответа: 27
Автор ответа:
 Ra$cal



ICQ: 8068014 

Вопросов: 18
Ответов: 817
 Web-сайт: www.rascalspb.narod.ru
 Профиль | | #27
Добавлено: 22.10.09 14:57
Посмотри наглядность мою и твою.

где наглядность. у тебя это можно назвать неочевидным поведением. т.е. такие места нада убирать и делать код предельно понятным, чтобы не приходилось задумываться, а для чего тут on error resume next. Ах он тут оказывается относится к логике правильного потока выполнения. Для проекта, который ты пишешь в одиночку - пох. Твои проблемы потом искать, где это был правильный поток выполнения для уменьшения строк кода, а где реальная защита от ошибок. А вот будь кто в команде - клац-клац бы звенели садовничьи ножницы чуть ниже твоего копчика.

Ответить

Номер ответа: 28
Автор ответа:
 __Pavel__



Вопросов: 29
Ответов: 284
 Web-сайт: ммм.сайта.НЕТ
 Профиль | | #28
Добавлено: 22.10.09 15:10
On Error Resume Next - нежная вещь, к ней нужно знать подход.

Я под столом :)
Нужно знать... что ОНА умерла :)
ибо On Error Resume Next реально рулит и ускоряет разработку программы

Допустим у тебя мега проект с кучей классов, которые используют другие классы и т.д. и все эти классы сведены в одном главном классе, и тут бац в процедуре на кнопочке у тебя ошибка, которая произошла далеко-далеко в главном классе и как ты найдешь где ошибка?

Ответить

Номер ответа: 29
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #29 Добавлено: 22.10.09 15:17
__Pavel__ пишет:
Допустим у тебя мега проект с кучей классов, которые используют другие классы и т.д. и все эти классы сведены в одном главном классе, и тут бац в процедуре на кнопочке у тебя ошибка, которая произошла далеко-далеко в главном классе и как ты найдешь где ошибка?

Как-как?
Он же написал как:
Хочешь отладить - закомментируй временно On Error Resume Next и все.

Ответить

Номер ответа: 30
Автор ответа:
 VβÐUηìt



Вопросов: 246
Ответов: 3333
 Web-сайт: смекаешь.рф
 Профиль | | #30
Добавлено: 22.10.09 19:06
Edit->Find and Replace

Вводим в верхнее поле
On Error Resume Next

В нижнее
'On Error Resume Next

Жмем "Replace All"

Ответить

Страница: 1 | 2 | 3 | 4 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам