Cделать устаревший VB-синтаксис современным

Разговоры на любые темы: вы можете обсудить здесь какой-либо сайт, найти единомышленников или просто пообщаться...
jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Cделать устаревший VB-синтаксис современным

Сообщение jangle » 05.01.2016 (Вт) 13:17

Конструкции языка давно устарели. Например ужасно бесит необходимость писать:

Код: Выделить всё
Dim str as String
str="Hello!"

когда можно было бы:
Код: Выделить всё
String str="Hello!"

или
Код: Выделить всё
a=a+1

можно сократить до
Код: Выделить всё
a++


Импорт DLL функций может быть короче
Код: Выделить всё
Declare Function lstrcat Lib "kernel32" Alias "lstrcatA" (ByVal lpString1 As String, ByVal lpString2 As String) As Long

так
Код: Выделить всё
Import kernel32.dll Long lstrcatA(String, String)


Короче говоря, нужен VB с новым синтаксисом, и не то убожество которое в VB.NET реализовано

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Cделать устаревший VB-синтаксис современным

Сообщение Mikle » 05.01.2016 (Вт) 13:46

jangle писал(а):Импорт DLL функций может быть короче

Тут ты сократил функциональность на Alias.
Остальное - ты просто C++ (C#) описываешь, выбирай тогда уж его.
А это:
Код: Выделить всё
Dim str as String
str="Hello!"

И так заменено на это:
Код: Выделить всё
Dim str as String = "Hello!"

Вполне по-бейсиковски.
Всякие a++ тоже считаю пережитком, это ассемблеровский инкремент. Вполне достаточно a+=1.

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: Cделать устаревший VB-синтаксис современным

Сообщение jangle » 05.01.2016 (Вт) 13:53

Mikle писал(а):Остальное - ты просто C++ (C#) описываешь, выбирай тогда уж его.


С# имеет простой современный синтаксис, вполне можно из него что-то взять. А то сейчас VB6 выглядит неуклюже как PL/I

Код: Выделить всё
Dim str as String = "Hello!"


тут две бесполезные лексемы "Dim" и "as", они висят мертвым грузом на языке

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

Сообщение Qwertiy » 05.01.2016 (Вт) 14:10

VB.NET:
Код: Выделить всё
Dim str = "Hello!"
a += 1

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Cделать устаревший VB-синтаксис современным

Сообщение alibek » 05.01.2016 (Вт) 23:47

Код: Выделить всё
String str="Hello!"

И что такое String?
MyUdt1 str="hello" это объявление и инициализация переменной с типом MyUdt1 или вызов процедуры MyUdt1 с передачей boolean-аргумента?


Сам по себе ++ без реализации конвейерных вычислений особого бонуса не дает.

Код: Выделить всё
Import kernel32.dll Long lstrcatA(String, String)

А что делать с Declare Sub?

Короче говоря, нужен VB с новым синтаксисом, и не то убожество которое в VB.NET реализовано

Предложенное - гораздо большее убожество.
Lasciate ogni speranza, voi ch'entrate.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Cделать устаревший VB-синтаксис современным

Сообщение Mikle » 06.01.2016 (Ср) 10:07

alibek писал(а):MyUdt1 str="hello" это объявление и инициализация переменной с типом MyUdt1 или вызов процедуры MyUdt1 с передачей boolean-аргумента?

Тут, видимо, последует совет заключать аргумент в скобки.
jangle писал(а):Конструкции языка давно устарели.

Мне синтаксис бейсика нравится своей лучшей читаемостью. Мне нравится, что каждая языковая конструкция закрывается своим ключевым словом - Loop, End If, Next и т. д. При чтении длинного цикла For, когда, видя конец конструкции, мы уже не видим начало, мы понимаем, что это именно For, то же самое касается принудительного выхода их цикла - Exit Do, Exit For.
Если у нас цикл Do...Loop содержит внутри цикл For, то мы можем выйти ИЗ ЛЮБОГО цикла, написав Exit Do либо Exit For, не городя костыли для этого. Select Case в VB на голову превосходит сишный switch.
Будь моя воля, я бы, скорее, сделал обязательным написание имени переменной после Next, как вариант - пусть IDE автоматически подставляет. В vb.net уже сделали Exit While и заменили Wend на End While, добавили возможность использования в Select Case объектных выражений, если для данного объектного типа определить соответствующие операторы (равенство-неравенство, больше-меньше и т. п.), это мне нравится, изменения в синтаксисе бейсика должны быть такими.
Мне нравится, что задание переменной либо функции явно отличается, так код лучше читается, да, это его немного удлиняет, но при современной тенденции давать имена типа TwipPerPixelX, SetSamplerState или QueryPerformanceCounter я не вижу в этом проблемы, тем более, что на vb код всё равно выходит короче, мы когда-то на Gamedev.ru это обсуждали, я привёл пример:

Код: Выделить всё
  Private Function TestLitera(ByVal s As String) As String
    Select Case LCase$(s)
      Case "ы", "а", "у", "о", "э", "и", "я", "ю", "ё", "е"
        TestLitera = "Гласная буква"
      Case "ь", "ъ"
        TestLitera = "Твёрдый\мягкий знак"
      Case "б" To "щ"
        TestLitera = "Согласная буква"
      Case "0" To "9"
        TestLitera = "Цифра"
      Case "a" To "z"
        TestLitera = "Латинская буква"
      Case Else
        TestLitera = "Символ"
    End Select
  End Function


Код: Выделить всё
    private string TestLitera(string s)
    {
      string sL = s.ToLower();

      if ((sL == "ы") || (sL == "а") || (sL == "у") || (sL == "о") || (sL == "э") || (sL == "и") || (sL == "я") || (sL == "ю") || (sL == "ё") || (sL == "е"))
        return "Гласная буква";
      else if ((sL == "ь") || (sL == "ъ"))
        return "Твёрдый\\мягкий знак";
      else if (sL.CompareTo("б") >= 0 && sL.CompareTo("щ") <= 0)
        return "Согласная буква";
      else if (sL.CompareTo("0") >= 0 && sL.CompareTo("9") <= 0)
        return "Цифра";
      else if (sL.CompareTo("a") >= 0 && sL.CompareTo("z") <= 0)
        return "Латинская буква";
      else
        return "Символ";
    }


Из "не VB-шных" нововведений, на которые я бы согласился - замена As на :, а : на ;, как в Паскале, просто так логичнее, более соответствует человеческому языку.

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: Cделать устаревший VB-синтаксис современным

Сообщение jangle » 06.01.2016 (Ср) 11:12

alibek писал(а):MyUdt1 str="hello" это объявление и инициализация переменной с типом MyUdt1


Код: Выделить всё
String str="Hello!"


или вызов процедуры MyUdt1 с передачей boolean-аргумента?


Код: Выделить всё
String() : str="Hello!"


А что делать с Declare Sub?


Выкинуть разумеется. Эпоха однопроходных компиляторов осталась в 80-ых годах прошлого века. Например, в последней версии PowerBasic их уже нет, и ничего жить можно.

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: Cделать устаревший VB-синтаксис современным

Сообщение jangle » 06.01.2016 (Ср) 11:39

Mikle а твой пример:

Код: Выделить всё
Private Function TestLitera(ByVal s As String) As String
    Select Case LCase$(s)
      Case "ы", "а", "у", "о", "э", "и", "я", "ю", "ё", "е"
        TestLitera = "Гласная буква"
    End Select
  End Function


Можно записать и так. Мусорного кода меньше. И бейсиковский синтаксис узнается

Код: Выделить всё
Function String TestLitera (String s)
     Select Lcase(s)
         Case  "ы", "а", "у", "о", "э", "и", "я", "ю", "ё", "е"
            TestLitera = "Гласная буква"
     End
End 

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Cделать устаревший VB-синтаксис современным

Сообщение Mikle » 06.01.2016 (Ср) 11:45

jangle писал(а):Можно записать и так.

На счёт замены Select Case на Select - согласен.
На счёт безликого End вместо End Select и End Function - категорически нет.

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: Cделать устаревший VB-синтаксис современным

Сообщение jangle » 06.01.2016 (Ср) 11:52

Код: Выделить всё
На счёт безликого End вместо End Select и End Function - категорически нет.


Это просто дело привычки. Да и потом, мы же в 2016 году. Сейчас любой редактор кода запросто покажет линиями какой End кому принадлежит

Безымянный.png
Безымянный.png (4.46 Кб) Просмотров: 9354


А плюс от этого очень большой. Код смотрится чище, меньше английского текста в программе, читать его проще.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Cделать устаревший VB-синтаксис современным

Сообщение alibek » 06.01.2016 (Ср) 11:57

jangle писал(а):
Код: Выделить всё
String str="Hello!"

Код: Выделить всё
String() : str="Hello!"


Вот замечательная иллюстрация; в предлагаемом синтаксисе ты даже не понял, о чем речь.
MyUdt1 str="hello" => MyUdt1 (str="hello") => MyUdt1(expr) (где expr=true при str="hello" и expr=false при другом значении str)
Lasciate ogni speranza, voi ch'entrate.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Cделать устаревший VB-синтаксис современным

Сообщение Mikle » 06.01.2016 (Ср) 12:00

jangle писал(а):Это просто дело привычки. Да и потом, мы же в 2016 году. Сейчас любой редактор кода запросто покажет линиями какой End кому принадлежит

Я выше уже писал об этом, особенно это плохо, когда конструкция большая, верхний край не влез в экран.

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: Cделать устаревший VB-синтаксис современным

Сообщение jangle » 06.01.2016 (Ср) 12:01

alibek писал(а): MyUdt1 (str="hello")


Это синтаксическая ошибка. Очевидно же.

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: Cделать устаревший VB-синтаксис современным

Сообщение jangle » 06.01.2016 (Ср) 12:07

Я предлагал сделать объявление переменных вот так:

[BYTE| INTEGER| LONG | STRING| etc..] variable = expression


Тут никаких скобок нет

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: Cделать устаревший VB-синтаксис современным

Сообщение jangle » 06.01.2016 (Ср) 12:14

Mikle писал(а):Я выше уже писал об этом, особенно это плохо, когда конструкция большая, верхний край не влез в экран.


Так что ли?

222.png
222.png (7.14 Кб) Просмотров: 9353

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Cделать устаревший VB-синтаксис современным

Сообщение alibek » 06.01.2016 (Ср) 12:36

jangle писал(а):Это синтаксическая ошибка. Очевидно же.

Нет.
Lasciate ogni speranza, voi ch'entrate.

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: Cделать устаревший VB-синтаксис современным

Сообщение jangle » 06.01.2016 (Ср) 12:45

alibek писал(а):Нет.


MyUdt1 (str="hello") - синтаксическая ошибка
-----------------------------------
MyUdt1 {CR} (str="hello") - нет ошибки
MyUdt1 {CR} str="hello" - нет ошибки
MyUdt1 {:} str="hello"- нет ошибки

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Cделать устаревший VB-синтаксис современным

Сообщение Mikle » 06.01.2016 (Ср) 12:57

jangle писал(а):Так что ли?

Нет. Наводить курсор на каждый End неудобно.
jangle писал(а):меньше английского текста в программе

Важно то, что это не новые английские слова, а те же, что в начале конструкции, мы не расширяем словарь.
Плюс важно ещё и в каждом Exit иметь те же уточняющие слова.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Cделать устаревший VB-синтаксис современным

Сообщение alibek » 06.01.2016 (Ср) 13:16

jangle писал(а):MyUdt1 (str="hello") [/color] - синтаксическая ошибка

Хватит уже фантазий.
Код: Выделить всё
Option Explicit

Type LogData
  Clock As Date
  Text As String
End Type

Sub LogData(ByVal Expr As Boolean)
MsgBox Expr
End Sub

Sub test()
Dim str As String
str = "abcd"
LogData str = "abc"
End Sub
Lasciate ogni speranza, voi ch'entrate.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Cделать устаревший VB-синтаксис современным

Сообщение Mikle » 06.01.2016 (Ср) 13:42

alibek писал(а):Хватит уже фантазий.

Он тебе про vb.net впаривает :)

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Cделать устаревший VB-синтаксис современным

Сообщение alibek » 06.01.2016 (Ср) 13:52

Не похоже.
В VB.NET давно добавлена возможность задать значение при объявлении переменной.
И кроме того:
jangle писал(а):А то сейчас VB6 выглядит неуклюже как PL/I
Lasciate ogni speranza, voi ch'entrate.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Cделать устаревший VB-синтаксис современным

Сообщение Mikle » 06.01.2016 (Ср) 14:02

alibek писал(а):Не похоже.
В VB.NET давно добавлена возможность задать значение при объявлении переменной.

Так он борется со словами Dim и As.
alibek писал(а):И кроме того:
jangle писал(а):
А то сейчас VB6 выглядит неуклюже как PL/I

А это притянуто для убедительности.

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

Сообщение Qwertiy » 06.01.2016 (Ср) 15:25

Mikle писал(а):Он тебе про vb.net впаривает :)

Так там так тоже можно.

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

Сообщение Qwertiy » 06.01.2016 (Ср) 15:46

Mikle писал(а):Так он борется со словами Dim и As.

В то время как разработчики C# наоборот считают, что использование сишного стиля с типом перед переменной было ошибкой.

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: Cделать устаревший VB-синтаксис современным

Сообщение jangle » 06.01.2016 (Ср) 16:39

Mikle писал(а):
alibek писал(а):Хватит уже фантазий.

Он тебе про vb.net впаривает :)


Впариваю про новый синтаксис VB6. Можно называть его VB7_Native :)

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: Cделать устаревший VB-синтаксис современным

Сообщение jangle » 06.01.2016 (Ср) 16:43

alibek писал(а):
jangle писал(а):MyUdt1 (str="hello") [/color] - синтаксическая ошибка

Хватит уже фантазий.
Код: Выделить всё
Option Explicit

Type LogData
  Clock As Date
  Text As String
End Type

Sub LogData(ByVal Expr As Boolean)
MsgBox Expr
End Sub

Sub test()
Dim str As String
str = "abcd"
LogData str = "abc"
End Sub


Какие фантазии? Ты хочешь убедить меня в кривости и глючности синтаксиса VB6? Так я об этом знаю, поэтому и создал этот тред.
Кстати вот мнение нормального компилятора о твоем примере.

Welcome to PB/Win IDE 10.04
Saving files...
Files saved.
Compiling "C:\test\test.bas"
PowerBASIC 10 for Windows
Copyright (c) 1996-2012 PowerBasic Inc.
Englewood, Florida USA
All Rights Reserved

Error 466 in C:\test\test.bas(12:005): This name is already in use
Line 12: SUB LogData(BYVAL Expr AS Boolean)

A likely conflict is in C:\test\test.bas:

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

Re: Cделать устаревший VB-синтаксис современным

Сообщение Хакер » 07.01.2016 (Чт) 4:16

jangle писал(а):Впариваю про новый синтаксис VB6. Можно называть его VB7_Native :)

jangle, никто не будет менять синтаксис.

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

Это как с ОС — если выпускать в свет новую ОС, то без того условия, что на ней заведётся старый софт, она никогда никакой мало-мальской популярности не сыщет.

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

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Cделать устаревший VB-синтаксис современным

Сообщение Mikle » 07.01.2016 (Чт) 9:14

Хакер писал(а):Если представить себе ситуацию, что кто-то завладел исходниками VB6 и завтра намерен выпустить VB7, то он не будет иметь синтаксис, чтобы не нарушить совместимость с тоннами уже написанного кода. А обратная совместимость с тоннами уже написанного кода — это вообще главная цель, ибо без этого никому новый VB7 не нужен и никакой популярности он никогда не заметит.

Достаточно сделать совместимость на уровнях нативном и COM для работы со старыми скомпилированными проектами и нормальный импортёр для старого кода. Если отличия всего лишь в синтаксисе, но не в концепции вообще, то импортёр сделать не сложно.
Другое дело, что большая часть того, что предлагает jangle, мне лично не нравится.

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: Cделать устаревший VB-синтаксис современным

Сообщение jangle » 07.01.2016 (Чт) 13:20

Хакер писал(а):
jangle писал(а):Впариваю про новый синтаксис VB6. Можно называть его VB7_Native :)

jangle, никто не будет менять синтаксис.

Если представить себе ситуацию, что кто-то завладел исходниками VB6 и завтра намерен выпустить VB7, то он не будет иметь синтаксис, чтобы не нарушить совместимость с тоннами уже написанного кода.


Язык все равно уже мертв. Новые проекты на нем никто не начинает, кроме кучки энтузиастов. Молодежь VB6 не знает, их больше привлекает C#, Go и Хаскель
Для поддержки старых можно использовать VB6. Так и что и о совместимости можно не думать.

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

Re: Cделать устаревший VB-синтаксис современным

Сообщение Хакер » 07.01.2016 (Чт) 13:21

Эксперт подтянулся.

Вон, тонны банковского софта в США на Фортране образца 70-х написано. Они там уже не знают, кого найти, чтобы поддерживали этот софт.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

След.

Вернуться в Народный треп

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

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

    TopList