Студопедия
rus | ua | other

Home Random lecture






Неявное продолжение строки


Date: 2015-10-07; view: 412.


Новые средства в Visual Basic 2010

Такие средства рассчитаны на то, чтобы вы могли делать больше, но при этом писать меньше строк кода. Мы (группа проектирования Visual Basic) изучали места, в которых разработчикам приходилось часто писать много утомительного стереотипного кода, и анализировали способы, которые позволили бы возложить эту работу на компилятор. Это картина в целом; теперь подробнее рассмотрим некоторые возможности.

Visual Basic — язык, ориентированный на строки, в котором используется четкий синтаксис, сходный с синтаксисом английского языка для улучшения читаемости кода. Но это часто приводит к тому, что строка вылезает за предел в 80 знаков на строку, вынуждая программистов прокручивать их туда-сюда. Вы можете использовать знак подчеркивания, сообщая компилятору, что следующая строка является частью текущей (т. е. несколько физических строк интерпретируются как единая логическая строка). Однако постоянный ввод этих знаков подчеркивания всегда был раздражающим фактором, и в течение долгих лет самым популярным запросом была просьба сделать так, чтобы компилятор «сам распознавал продолжение строки».

И вот в Visual Basic 2010 компилятор этому научился. Теперь он знает, какие лексемы (например, запятые, скобки и операторы) встречаются справа до символа продолжения строки, и сам вставляет этот символ, так что разработчикам больше не нужно думать об этом. Скажем, завершение выражения Visual Basic запятой не допускается; компилятору это известно, поэтому, обнаруживая поток лексем вроде {запятая, enter}, он логически распознает присутствие символа продолжения строки, как показано в примере на рис. 1.

Рис. 1 Логическое распознавание продолжения строки

<Extension()>

Function FilterByCountry(

ByVal customers As IEnumerable(Of Customer),

ByVal country As String) As IEnumerable(Of Customer)

Dim query =

From c In customers

Where c.Country = country

Select <Customer>

<%=

c.Name &

"," &

c.Country

%>

</Customer>

Return query

End Function

В Visual Basic 2008 в коде на рис. 1 потребовались бы девять знаков подчеркивания. Однако теперь в каждом из этих случаев компилятор сам определяет, когда нужен знак подчеркивания, и разрешает опускать его:

  • после атрибута <Extension()>;
  • после открывающей скобки в объявлении метода;
  • после запятой за первым параметром;
  • до закрывающей скобки в объявлении метода;
  • после знака «равно»;
  • после комбинации знаков «<%=»;
  • после каждого амперсанда (&) в XML-литерале;
  • до комбинации знаков «%>».

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

Рис. 2 Случаи, в которых подразумевается неявное использование символов продолжения строк

Лексема До После
, (запятая), . (точка), > (атрибуты), ( { (открывающие скобки), <%= (начало встроенного выражения, например XML-литералы))   X
), }, , ] (закрывающие скобки), %> (конец встроенного выражения) X  
Все ключевые слова LINQ: Aggregate, Distinct, From, Group By, Group Join, Join, Let, Order By, Select, Skip, Skip While, Take, Take While, Where, In, Into, On, Ascending, Descending X X
Операторы: + , - , * , / , \ , ^ , >> , << , Mod, & , += , -= , *= , /= , \= , ^= , >>= , <<= , &= , < , <= , > , >= , <> , Is, IsNot, Like, And, Or, Xor, AndAlso, OrElse   X
With (в инициализаторе объекта)   X

Как видите, более чем в 60 местах язык больше не требует знаков подчеркивания. (Фактически ни один из примеров кода в этой статье не требует присутствия символов продолжения строк.) Конечно, вы можете по-прежнему ими пользоваться, и код, написанный на предыдущих версиях Visual Basic, будет нормально компилироваться.


<== previous lecture | next lecture ==>
Совместная эволюция | Лямбды выражений
lektsiopedia.org - 2013 год. | Page generation: 0.154 s.