C# vs. VB.NET

Windows лучше чем Linux! Чем? Ясно же написано — чем Linux!
Раздуй свой холивар сегодня, потому что завтра это может сделать уже кто-то другой!
Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Re: C# vs. VB.NET

Сообщение Antonariy » 09.08.2011 (Вт) 0:44

Хакер писал(а):iif для этой роли создаёт ещё одну проблему переносимости с VB6 под VB.NET

Переноситель кода vb6 -> net детектед :lol:
Бобро пожаловать.
Лучший способ понять что-то самому — объяснить это другому.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: C# vs. VB.NET

Сообщение Хакер » 09.08.2011 (Вт) 8:56

Antonariy писал(а):Переноситель кода vb6 -> net детектед :lol:
Бобро пожаловать.

Я этим не занимаюсь, не занимался, и не планирую, а просто анализирую ситуацию с точки зрения разработчика языка.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Re: C# vs. VB.NET

Сообщение Antonariy » 09.08.2011 (Вт) 12:41

Когда я только начинал заниматься дотнетом, я тоже этого стыдился, делал это в одиночестве и старался запереться на ключ, чтобы никто не мог застать меня за этим занятием ВНЕЗАПНО. Но однажды понял, что это ложный стыд и ничего особенного в этом нет, и стал заниматься дотнетом когда захочется, не обращая внимания на окружающих. Хочешь поговорить об этом?
Лучший способ понять что-то самому — объяснить это другому.

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 23.08.2011 (Вт) 21:37

Qwertiy писал(а):C#:ok, VB:fail
Команда может начинаться со скобки или new.
Код: Выделить всё
(New Cls()).DoIt()
исправлено на
C#:ok, VB:fail Both:ok
Команда может начинаться со скобки или new.
Код: Выделить всё
Call (New Cls()).DoIt()

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 06.09.2011 (Вт) 15:27

Qwertiy писал(а):Невозможно использовать логическое Не к целым числам, как в Си.

Небольшое уточнение: В VB.NET можно написать Not CBool(X), но это ничем не лучше чем X=0.

Хакер писал(а):iif для этой роли создаёт ещё одну проблему переносимости с VB6 под VB.NET

IIf тоже существует. Разница в том, что If выполняет действия лениво, а при использовании IIf вычисляются все выражения.

Proxy
Профессор VB наук
Профессор VB наук
Аватара пользователя
 
Сообщения: 2941
Зарегистрирован: 31.08.2007 (Пт) 4:41

Re: C# vs. VB.NET

Сообщение Proxy » 06.09.2011 (Вт) 18:56

Qwertiy писал(а):IIf тоже существует. Разница в том, что If выполняет действия лениво, а при использовании IIf вычисляются все выражения.

Т.е. "лениво"? Что-то вроде работы замыкающей дизъюнкции?
Follow the white rabbit.

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 06.09.2011 (Вт) 19:38

Proxy писал(а):Т.е. "лениво"?

Ленивые (или отложенные) вычисления - это способ вычислений, при котором выражение вычисляется только в тот момент, когда оно нужно.
http://ru.wikipedia.org/wiki/Ленивые_вычисления

Если непонятно, то поробуйте выполнить
Код: Выделить всё
Dim A = If(True, MsgBox("If True :: True"), MsgBox("If True :: False"))
Dim B = IIf(True, MsgBox("IIf True :: True"), MsgBox("IIf True :: False"))
И обратите внимание, что If - это конструкция, а IIf - функция, поэтому к первой нельзя применить Call, а ко второй - можно.

Proxy писал(а):Что-то вроде работы замыкающей дизъюнкции?

А вот что это - уже я не знаю.

Proxy
Профессор VB наук
Профессор VB наук
Аватара пользователя
 
Сообщения: 2941
Зарегистрирован: 31.08.2007 (Пт) 4:41

Re: C# vs. VB.NET

Сообщение Proxy » 06.09.2011 (Вт) 20:25

Qwertiy писал(а):А вот что это - уже я не знаю.

Да, тоже под Ленивые вписывается, выходит, если я верно понял.
Вот так используется замыкающая конъюнкция:
if (denom != 0 && num / denom > 10)
Т.е. тут деления на ноль гарантированно не произойдёт, т.к. если первый операнд равен нулю, то выражение num / denom > 10 рассматривать нет надобности и с && не будет (в отличие от &). Дизъюнкция так же, удобно в сочетании с инкрементом использовать. Если первый операнд имеет значение истина, то второй остаётся нетронутым (например не делится на ноль или не переполняется). Это Java (но и не только).
Follow the white rabbit.

FireFenix
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1640
Зарегистрирован: 25.05.2007 (Пт) 10:24
Откуда: Mugen no Sora

Re: C# vs. VB.NET

Сообщение FireFenix » 06.09.2011 (Вт) 21:04

Qwertiy писал(а):IIf тоже существует. Разница в том, что If выполняет действия лениво, а при использовании IIf вычисляются все выражения.

Пруф?
Птицей Гермеса меня называют, свои крылья пожирая... сам себя я укрощаю
私はヘルメスの鳥 私は自らの羽根を喰らい 飼い慣らされる

Alec
Бывалый
Бывалый
 
Сообщения: 275
Зарегистрирован: 31.08.2008 (Вс) 0:15
Откуда: Ростов-на-Дону

Re: C# vs. VB.NET

Сообщение Alec » 06.09.2011 (Вт) 21:49

FireFenix писал(а):
Qwertiy писал(а):IIf тоже существует. Разница в том, что If выполняет действия лениво, а при использовании IIf вычисляются все выражения.

Пруф?

http://msdn.microsoft.com/ru-ru/library/bb513985.aspx
Иногда лучше вовремя остановиться...
И начать заново!

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 06.09.2011 (Вт) 22:39

Proxy писал(а):Вот так используется замыкающая конъюнкция:if (denom != 0 && num / denom > 10)

Это знаю, но названия "замыкающая" нигде не встречал :)

FireFenix писал(а):
Qwertiy писал(а):IIf тоже существует. Разница в том, что If выполняет действия лениво, а при использовании IIf вычисляются все выражения.

Пруф?

Пишем
Код: Выделить всё
Dim A = If(True, MsgBox("If True :: True"), MsgBox("If True :: False"))
Dim B = IIf(True, MsgBox("IIf True :: True"), MsgBox("IIf True :: False"))
запускаем и убеждаемся :)

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: C# vs. VB.NET

Сообщение Хакер » 06.09.2011 (Вт) 22:40

Qwertiy писал(а):IIf тоже существует. Разница в том, что If выполняет действия лениво, а при использовании IIf вычисляются все выражения.

Причём тут ленивость. Не нужно лепить термины, которые совершенно не соответствуют ситуации.
Правильный ответ: одно — тернарный оператор, другое — обыкновенная функция.

И более того, каков был смысл отвечать всем этим предложением на мою отцитированную фразу? Если в гипотетическом наследнике VB6 заменить функцию iif на оператор iif, это и создаст проблему переносимости, потому что старый исходный код будет полагаться на то, что оба выражения вычисляются. По этой причине, если вы создаёте язык, который должен обеспечивать обратную совместимость с VB6, iif в нём должен остаться функцией, а для тернарного оператора нужно выбрать что-то другое.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 06.09.2011 (Вт) 22:57

Хакер писал(а):Причём тут ленивость. Не нужно лепить термины, которые совершенно не соответствуют ситуации.

Термин был применён верно. Он обозначает именно то, что есть.

Хакер писал(а):И более того, каков был смысл отвечать всем этим предложением на мою отцитированную фразу?

Хм... На самом деле я отвечал на
Proxy писал(а):А этого я не понимю, с iif же выглядело гораздо лучше, разве нет? Зачем было делать двойную нагрузку на "if"?

Хакер писал(а):По этой причине, если вы создаёте язык, который должен обеспечивать обратную совместимость с VB6, iif в нём должен остаться функцией, а для тернарного оператора нужно выбрать что-то другое.

Но ведь так оно и есть.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: C# vs. VB.NET

Сообщение Хакер » 06.09.2011 (Вт) 23:40

Qwertiy писал(а):Термин был применён верно. Он обозначает именно то, что есть.

Нет.
Ленивые вычисления — это вычисления, откладываемые (самой исполнительной системой) до тех пор, когда настанет наиболее блогоприятное время. Или которые вообще не производятся, если нет нужды. Это значит, что программист пишет код так, как будто вычисление выражения должно произойти здесь и сейчас, но когда оно произойдёт на самом деле, в соответствии с концепцией, программист не знает и не должен задумываться.

А есть в некоторых императивных ЯП просто операторы, операндные выражения которых просто не вычисляются в ряде случаев. Во-первых, это жесто зафиксировано в спецификации языка (при каком условии вычисление не происходит). Во-вторых, не бывает никакого откладывания до лучших времён. Либо сейчас, либо никогда. И в третьих, в соответствии с концепцией языка, программист совершенно точно знает, что выражение вычисленно не будет (в случае тернарного оператора условия или && или ||), или гарантированно будет (в случае Iif). Здесь нет никакой лени, только строгая жесткая машинная логика.

Qwertiy писал(а):Хм... На самом деле я отвечал на

Ну, по крайней мере отцитировал ты моё сообщение о проблеме переносимости.

Qwertiy писал(а):Но ведь так оно и есть.

Почему «но»? Где скрытое или явное противоречие с моими словами?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 07.09.2011 (Ср) 0:56

Хакер писал(а):Почему «но»? Где скрытое или явное противоречие с моими словами?

Видимо, я решил так из-за фразы
Хакер писал(а):iif для этой роли создаёт ещё одну проблему переносимости с VB6 под VB.NET
"Создаёт" означает, что проблема есть. Раз её нет, должно быть "создаст" или "создало бы".

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: C# vs. VB.NET

Сообщение Хакер » 07.09.2011 (Ср) 0:58

Qwertiy писал(а):"Создаёт" означает, что проблема есть.

Создаёт, значит проблема есть, но она есть, когда «iif для этой роли».
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

FireFenix
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1640
Зарегистрирован: 25.05.2007 (Пт) 10:24
Откуда: Mugen no Sora

Re: C# vs. VB.NET

Сообщение FireFenix » 07.09.2011 (Ср) 2:29

Qwertiy писал(а):
Хакер писал(а):Причём тут ленивость. Не нужно лепить термины, которые совершенно не соответствуют ситуации.

Термин был применён верно. Он обозначает именно то, что есть.

На самом деле всё гораздо проще.
If - оператор
IIf - функция


Microsoft.VisualBasic.Iteraction

Код: Выделить всё
    Friend Shared Function IIf(Of T)(ByVal Condition As Boolean, ByVal TruePart As T, ByVal FalsePart As T) As T
        If Condition Then
            Return TruePart
        End If
        Return FalsePart
    End Function


Код: Выделить всё
    Public Shared Function IIf(ByVal Expression As Boolean, ByVal TruePart As Object, ByVal FalsePart As Object) As Object
        If Expression Then
            Return TruePart
        End If
        Return FalsePart
    End Function


Собственно как и говорит Хакер
Последний раз редактировалось FireFenix 07.09.2011 (Ср) 17:07, всего редактировалось 8 раз(а).
Птицей Гермеса меня называют, свои крылья пожирая... сам себя я укрощаю
私はヘルメスの鳥 私は自らの羽根を喰らい 飼い慣らされる

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 07.09.2011 (Ср) 15:54

Qwertiy писал(а):И обратите внимание, что If - это конструкция, а IIf - функция
Хакер писал(а):Правильный ответ: одно — тернарный оператор, другое — обыкновенная функция.
FireFenix писал(а):На самом деле всё гораздо проще.
If - оператор
IIf - функция

Кто ещё хочет предложить свой вариант этой фразы? :mrgreen:

FireFenix
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1640
Зарегистрирован: 25.05.2007 (Пт) 10:24
Откуда: Mugen no Sora

Re: C# vs. VB.NET

Сообщение FireFenix » 07.09.2011 (Ср) 17:10

Qwertiy писал(а):
Хакер писал(а):Правильный ответ: одно — тернарный оператор, другое — обыкновенная функция.
FireFenix писал(а):На самом деле всё гораздо проще.
If - оператор
IIf - функция

Кто ещё хочет предложить свой вариант этой фразы? :mrgreen:

В данном случае я поддержал определение Хакера
Птицей Гермеса меня называют, свои крылья пожирая... сам себя я укрощаю
私はヘルメスの鳥 私は自らの羽根を喰らい 飼い慣らされる

Debugger
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1667
Зарегистрирован: 17.06.2006 (Сб) 15:11

Re: C# vs. VB.NET

Сообщение Debugger » 07.09.2011 (Ср) 17:59

(на правах оффтопика)
Когда я только начинал заниматься X, я тоже этого стыдился, делал это в одиночестве и старался запереться на ключ, чтобы никто не мог застать меня за этим занятием ВНЕЗАПНО. Но однажды понял, что это ложный стыд и ничего особенного в этом нет, и стал заниматься X когда захочется, не обращая внимания на окружающих.

Вместо X так и хочется поставить что-то плохое. Но на деле X="дотнет".

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: C# vs. VB.NET

Сообщение ger_kar » 25.10.2011 (Вт) 18:48

Antonariy писал(а):Когда я только начинал заниматься дотнетом, я тоже этого стыдился, делал это в одиночестве и старался запереться на ключ, чтобы никто не мог застать меня за этим занятием ВНЕЗАПНО.
Странный подход, заниматься или не заниматься чем либо в угоду окружающим. Мне например глубоко пофиг, нравиться кому-то то, что я делаю или нет, главное, что-бы самому нравилось.
Antonariy писал(а):Но однажды понял, что это ложный стыд и ничего особенного в этом нет, и стал заниматься дотнетом когда захочется, не обращая внимания на окружающих.
Вот именно! Так всегда и нужно поступать.
Бороться и искать, найти и перепрятать

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Re: C# vs. VB.NET

Сообщение Antonariy » 26.11.2011 (Сб) 23:24

ger_kar писал(а): Странный подход, заниматься или не заниматься чем либо в угоду окружающим. Мне например глубоко пофиг, нравиться кому-то то, что я делаю или нет, главное, что-бы самому нравилось.
Подрочи в автобусе. :wink:

ЗЫ: Весь тот пост был шуткой.
Лучший способ понять что-то самому — объяснить это другому.

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: C# vs. VB.NET

Сообщение ger_kar » 27.11.2011 (Вс) 6:24

Debugger писал(а):Когда я только начинал заниматься X, я тоже этого стыдился, делал это в одиночестве и старался запереться на ключ, чтобы никто не мог застать меня за этим занятием ВНЕЗАПНО. Но однажды понял, что это ложный стыд и ничего особенного в этом нет, и стал заниматься X когда захочется, не обращая внимания на окружающих.
Вместо X так и хочется поставить что-то плохое. Но на деле X="дотнет".

Antonariy таки и не утерпел и поставил :) =>
Antonariy писал(а):Подрочи в автобусе.
Бороться и искать, найти и перепрятать

krukovis84
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 108
Зарегистрирован: 04.08.2009 (Вт) 11:16
Откуда: Кочевник

Re: C# vs. VB.NET

Сообщение krukovis84 » 23.08.2012 (Чт) 17:14

А почему никто не вспомнил, что на VB.NET невозможно написать DLL? Я перешел на C# только из за этого, хотя сопротивлялся изо всех сил 2 года. Уговаривал себя, что мне это и не сильно нужно и вообще.
Но сейчас залип на шарпе. Нравится. Все логично и однообразно. Все строго.
Нет лишних нагромождений Dim i as Integer, а лаконичное int i;
; - рудимент, конечно. Но т.к. ставишь это бесконечно число раз, пока пишешь - в какой то момент не замечаешь и воспринимаешь нормально.

FireFenix
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1640
Зарегистрирован: 25.05.2007 (Пт) 10:24
Откуда: Mugen no Sora

Re: C# vs. VB.NET

Сообщение FireFenix » 23.08.2012 (Чт) 17:26

krukovis84 писал(а):А почему никто не вспомнил, что на VB.NET невозможно написать DLL?

Кто тебе сказал?
Вложения
999.PNG
Птицей Гермеса меня называют, свои крылья пожирая... сам себя я укрощаю
私はヘルメスの鳥 私は自らの羽根を喰らい 飼い慣らされる

Proxy
Профессор VB наук
Профессор VB наук
Аватара пользователя
 
Сообщения: 2941
Зарегистрирован: 31.08.2007 (Пт) 4:41

Re: C# vs. VB.NET

Сообщение Proxy » 23.08.2012 (Чт) 18:57

krukovis84 писал(а):; - рудимент, конечно.

Как же так? Ведь это удобней читается, чем CrLf (лишние заморочки с переводом каретки, приходится использовать там, где они явно не нужны или использовать вместо crlf альтернативное окончание). Ну а если совсем вручную не определять границы, то имхо получится что-то совсем неудобное для глаза. Я могу судить только по php, java и as 2.0, там всяко без этого получилась бы каша кое-где.
Например такая конструкция $sth = mysql_query($query) с одной стороны обычное присвоение, с другой стороны может возвращать успешность присвоения. И границу множественной конкатенации увидеть не просто с учётом того, что используется и апостроф и двойной апостроф (кавычки), используются с разной целью и очень часто присутствуют как границы операндов и те и те одновременно и ещё входят одни в другие и границу проще всего заметить по точке с запятой.Ну и плюс редактор не обязан знать все конструкции в этом случае, чтобы подсвечивать границы конструкций корректно.
Follow the white rabbit.

krukovis84
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 108
Зарегистрирован: 04.08.2009 (Вт) 11:16
Откуда: Кочевник

Re: C# vs. VB.NET

Сообщение krukovis84 » 24.08.2012 (Пт) 20:31

FireFenix писал(а):
krukovis84 писал(а):А почему никто не вспомнил, что на VB.NET невозможно написать DLL?

Кто тебе сказал?

Вот те на :D.
Ну теперь уже поздно. Залип на шарпе :D. Да и с точки зрения перехода на другие языки: PHP, JavaSript и т.д., что происходит как правило спонтанно, удобнее когда не надо вспоминать синтаксические конструкции, а просто брать и писать.
И еще один большой плюс шарпа - на нем пишут все мои знакомые, а на VB пишут только знакомые на этом форуме, но они так же все пишут на шарпе и поэтому на шарпе пишут Все мои знакомые. А это несомненно большой плюс.

krukovis84
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 108
Зарегистрирован: 04.08.2009 (Вт) 11:16
Откуда: Кочевник

Re: C# vs. VB.NET

Сообщение krukovis84 » 24.08.2012 (Пт) 20:34

Proxy писал(а):
krukovis84 писал(а):; - рудимент, конечно.

Как же так? Ведь это удобней читается, чем CrLf (лишние заморочки с переводом каретки, приходится использовать там, где они явно не нужны или использовать вместо crlf альтернативное окончание).

Удобнее когда одна команда на одну строку.

Proxy
Профессор VB наук
Профессор VB наук
Аватара пользователя
 
Сообщения: 2941
Зарегистрирован: 31.08.2007 (Пт) 4:41

Re: C# vs. VB.NET

Сообщение Proxy » 24.08.2012 (Пт) 21:17

Весьма спорное утверждение, в расстановке переходов строк я придерживаюсь несколько иного стиля. Например нет никакого смысла разносить по строкам функцию регистрации ошибки в журнале, вывод сообщения об ошибке и прекращение выполнения. В этом случае легче сконцентрировать внимание на значимые фрагменты кода, а вполне очевидные последовательности команд умещать в одну строку, дабы не загромождать.
Follow the white rabbit.

Admiralisimys
Постоялец
Постоялец
 
Сообщения: 318
Зарегистрирован: 01.06.2009 (Пн) 10:26

Re: C# vs. VB.NET

Сообщение Admiralisimys » 25.08.2012 (Сб) 19:04

krukovis84 писал(а):Нет лишних нагромождений Dim i as Integer, а лаконичное int i;

Для классов посложнее и VB.NET может предложить более лаконично
Код: Выделить всё
Dim form as New Form 'VB.NET
Form form = new Form; //CSharp


Но на самом деле если заглянуть вглубь бинарников собранных на VB.NET и CSharp эквивалентного кода чем ни будь типа ILSpy, то вскрывается любопытная картина и причина почему бинарники от VB.NET больше, ведь там компилятор нагенерировал множество перестраховок, чего в бинарнике CSharp нет.
Так что я полагаю, больше по этой причине С# более популярен.

Пред.След.

Вернуться в Holy Wars@VBStreets

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 19

    TopList