Страница 4 из 5

Re: C# vs. VB.NET

СообщениеДобавлено: 09.08.2011 (Вт) 0:44
Antonariy
Хакер писал(а):iif для этой роли создаёт ещё одну проблему переносимости с VB6 под VB.NET

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

Re: C# vs. VB.NET

СообщениеДобавлено: 09.08.2011 (Вт) 8:56
Хакер
Antonariy писал(а):Переноситель кода vb6 -> net детектед :lol:
Бобро пожаловать.

Я этим не занимаюсь, не занимался, и не планирую, а просто анализирую ситуацию с точки зрения разработчика языка.

Re: C# vs. VB.NET

СообщениеДобавлено: 09.08.2011 (Вт) 12:41
Antonariy
Когда я только начинал заниматься дотнетом, я тоже этого стыдился, делал это в одиночестве и старался запереться на ключ, чтобы никто не мог застать меня за этим занятием ВНЕЗАПНО. Но однажды понял, что это ложный стыд и ничего особенного в этом нет, и стал заниматься дотнетом когда захочется, не обращая внимания на окружающих. Хочешь поговорить об этом?

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

СообщениеДобавлено: 06.09.2011 (Вт) 15:27
Qwertiy
Qwertiy писал(а):Невозможно использовать логическое Не к целым числам, как в Си.

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

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

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

Re: C# vs. VB.NET

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

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

СообщениеДобавлено: 06.09.2011 (Вт) 19:38
Qwertiy
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 писал(а):Что-то вроде работы замыкающей дизъюнкции?

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

Re: C# vs. VB.NET

СообщениеДобавлено: 06.09.2011 (Вт) 20:25
Proxy
Qwertiy писал(а):А вот что это - уже я не знаю.

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

Re: C# vs. VB.NET

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

Пруф?

Re: C# vs. VB.NET

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

Пруф?

http://msdn.microsoft.com/ru-ru/library/bb513985.aspx

СообщениеДобавлено: 06.09.2011 (Вт) 22:39
Qwertiy
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"))
запускаем и убеждаемся :)

Re: C# vs. VB.NET

СообщениеДобавлено: 06.09.2011 (Вт) 22:40
Хакер
Qwertiy писал(а):IIf тоже существует. Разница в том, что If выполняет действия лениво, а при использовании IIf вычисляются все выражения.

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

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

СообщениеДобавлено: 06.09.2011 (Вт) 22:57
Qwertiy
Хакер писал(а):Причём тут ленивость. Не нужно лепить термины, которые совершенно не соответствуют ситуации.

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

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

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

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

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

Re: C# vs. VB.NET

СообщениеДобавлено: 06.09.2011 (Вт) 23:40
Хакер
Qwertiy писал(а):Термин был применён верно. Он обозначает именно то, что есть.

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

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

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

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

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

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

СообщениеДобавлено: 07.09.2011 (Ср) 0:56
Qwertiy
Хакер писал(а):Почему «но»? Где скрытое или явное противоречие с моими словами?

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

Re: C# vs. VB.NET

СообщениеДобавлено: 07.09.2011 (Ср) 0:58
Хакер
Qwertiy писал(а):"Создаёт" означает, что проблема есть.

Создаёт, значит проблема есть, но она есть, когда «iif для этой роли».

Re: C# vs. VB.NET

СообщениеДобавлено: 07.09.2011 (Ср) 2:29
FireFenix
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


Собственно как и говорит Хакер

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

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

Re: C# vs. VB.NET

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

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

В данном случае я поддержал определение Хакера

Re: C# vs. VB.NET

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

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

Re: C# vs. VB.NET

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

Re: C# vs. VB.NET

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

ЗЫ: Весь тот пост был шуткой.

Re: C# vs. VB.NET

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

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

Re: C# vs. VB.NET

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

Re: C# vs. VB.NET

СообщениеДобавлено: 23.08.2012 (Чт) 17:26
FireFenix
krukovis84 писал(а):А почему никто не вспомнил, что на VB.NET невозможно написать DLL?

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

Re: C# vs. VB.NET

СообщениеДобавлено: 23.08.2012 (Чт) 18:57
Proxy
krukovis84 писал(а):; - рудимент, конечно.

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

Re: C# vs. VB.NET

СообщениеДобавлено: 24.08.2012 (Пт) 20:31
krukovis84
FireFenix писал(а):
krukovis84 писал(а):А почему никто не вспомнил, что на VB.NET невозможно написать DLL?

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

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

Re: C# vs. VB.NET

СообщениеДобавлено: 24.08.2012 (Пт) 20:34
krukovis84
Proxy писал(а):
krukovis84 писал(а):; - рудимент, конечно.

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

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

Re: C# vs. VB.NET

СообщениеДобавлено: 24.08.2012 (Пт) 21:17
Proxy
Весьма спорное утверждение, в расстановке переходов строк я придерживаюсь несколько иного стиля. Например нет никакого смысла разносить по строкам функцию регистрации ошибки в журнале, вывод сообщения об ошибке и прекращение выполнения. В этом случае легче сконцентрировать внимание на значимые фрагменты кода, а вполне очевидные последовательности команд умещать в одну строку, дабы не загромождать.

Re: C# vs. VB.NET

СообщениеДобавлено: 25.08.2012 (Сб) 19:04
Admiralisimys
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 нет.
Так что я полагаю, больше по этой причине С# более популярен.