MT5, mql5, mql5.com предложения по улучшению. - страница 20

 
Sergey Gridnev #:
Лишнее не пишите и тогда не приведет.
Объясните, пожалста, как написать это компактнее чем я предложил? Если есть решение - то буду с благодарностью пользоваться.  Если это не флуд или троллинг.
 
Andrei Sokolov #:
Господа, прежде чем писать подобное прочитайте внимательно суть предложения, и она тут только в том чтоб сократить писанину и ни в чем другом.

сократить писанину в ущерб логике языка.  Вы внутри блока (функциии) хотите объявить переменную, находящуюся за пределами этого блока. Это противоречит всей концепции. С таким же успехом тогда надо разрешить и объявление локальных переменных из внутреннего блока:

if (condition) {
  local string name = "bla-bla-bla";
}
Print(name);
А если этот блок не будет вызван?
 
Alexey Navoykov #:

сократить писанину в ущерб логике языка.  Вы внутри блока (функциии) хотите объявить переменную, находящуюся за пределами этого блока. Это противоречит всей концепции. С таким же успехом тогда надо разрешить и объявление локальных переменных из внутреннего блока:

А если этот блок не будет вызван?

Нет никакого ущерба, я чуть выше писал что все оч просто:

Суть предложения в том что если компилятор видит:

void Function()
  {
   global string name_value_tp = n + " text__line_" + (string)line + "__column_" + (string)2 + "__" + (string)1;
  }

то чтоб он сам делал:

string name_value_tp;

void Function()
  {
   name_value_tp = n + " text__line_" + (string)line + "__column_" + (string)2 + "__" + (string)1;
  }

Прост предлагаю иметь возможность сократить писанину на отдельном объявлении переменных.  Думаю что на практике этим пользовалось большинство, пусть не сразу. Но сокращение писанины, тем более когда не нужно мотаться чтоб отдельно объявлять переменные это было бы удобно.

 
Alexey Navoykov #:
С таким же успехом тогда надо разрешить и объявление локальных переменных из внутреннего блока:
Я не совсем это предлагал, но такой вариант меня тоже устроил бы тк решил бы обсуждаемую проблему, те будет видна объявленная переменная  только на один уровень выше, или во всем пространстве имен, или глобально, или для каждого варианта отдельный модификатор - меня любой вариант устроит тк любой из этих вариантов закроет вопрос.
 
Sergey Gridnev #:
При этом, тебя не интересует, что модификация языка создаёт риск появления новых багов, а их [багов] и так хватает.
Предложение максимально простое. 
 
Andrei Sokolov #:

Нет никакого ущерба, я чуть выше писал что все оч просто:

Суть предложения в том что если компилятор видит:

то чтоб он сам делал:

Прост предлагаю иметь возможность сократить писанину на отдельном объявлении переменных.  Думаю что на практике этим пользовалось большинство, пусть не сразу. Но сокращение писанины, тем более когда не нужно мотаться чтоб отдельно объявлять переменные это было бы удобно.

А вы знакомы с передачей переменных по ссылке?

 
Alexey Viktorov #:

А вы знакомы с передачей переменных по ссылке?

Да, но как это поможет сократить писанину в данном случае?
 
Andrei Sokolov #:

Нет никакого ущерба, я чуть выше писал что все оч просто:

Суть предложения в том что если компилятор видит:

то чтоб он сам делал:

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

Если даже допустить применение такого, то только внутри функции, гарантированно вызываемой компилятором при старте программы. Т.е. внутри OnInit. А не в произвольных функциях. Ну либо компилятор должен проконтролировать, чтобы ваша функция была вызвана непосредственно из OnInit.  Иначе это безконтрольный хаос

 
Alexey Navoykov #:

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

Если даже допустить применение такого, то только внутри функции, гарантированно вызываемой компилятором при старте программы. Т.е. внутри OnInit. А не в произвольных функциях. Ну либо компилятор должен проконтролировать, чтобы ваша функция была вызвана непосредственно из OnInit.  Иначе это безконтрольный хаос

Да нет же тут никакого хаоса, прост чтоб когда компилятор видит

void Function()
  {
   global string name_value_tp = n + " text__line_" + (string)line + "__column_" + (string)2 + "__" + (string)1;
  }

то чтоб он сам делал:

string name_value_tp;

void Function()
  {
   name_value_tp = n + " text__line_" + (string)line + "__column_" + (string)2 + "__" + (string)1;
  }


Так-же как компилятор делает и огромное множество других вещей, как макроподстановки, подключаемые файлы, функции и тд.

 
Andrei Sokolov #:
то чтоб он сам делал
Ну, если Вам это так необходимо, делайте это самостоятельно. Перекладывать замусоривание на компилятор не надо.

И, да, к увеличению "писанины" это не ведет.