Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

grammar

  • Loading branch information...
commit 5b6a637e5bba1a072bd49f44e0637001f97c6af2 1 parent 1c00601
@zag authored
Showing with 33 additions and 12 deletions.
  1. +21 −0 samples/test.p6
  2. +11 −11 src/classes-and-objects.pod6
  3. +1 −1  src/subs-n-sigs.pod
View
21 samples/test.p6
@@ -0,0 +1,21 @@
+#!/usr/bin/perl6
+use v6;
+class Attr {
+ has Bool $.done is rw ;
+method set_bool( Bool $value) {
+ $.done = $value;
+}
+method get_bool() {
+ return $.done
+}
+
+}
+class Prop is Attr {
+}
+
+ my $v = Attr.new;
+ say $v ~~ Attr;
+ my $p = Prop.new;
+ say $p.perl;
+ say $v.methods(:local).join(', ');
+
View
22 src/classes-and-objects.pod6
@@ -5,7 +5,7 @@
зависимостей в Perl 6. Она демонстрирует использование пользовательских
конструкторов, приватных и публичных атрибутов, методов, а также
некоторые аспекты сигнатур. Кода в примере приведено не много,
-тем не менее он интересен и местами полезен.
+тем не менее он интересен и местами полезен.
=begin code
@@ -121,7 +121,7 @@ X<|sigils, ampersand>
X<|twigils>
X<|twigils, !>
-Сигил C<&> указывает, что аттрибут представляет собой нечно вызываемое I<(invocable)>. Символ C<!> является твигилом I<(twigil)>, или выражаясь иначе - вторым сигилом. Твигил является частью имени переменной. В данном случае твигил C<!> подчеркивает что данный атрибут является приватным I<(собсвенным, private)>, то есть недоступен вне класса.
+Сигил C<&> указывает, что атрибут представляет собой нечно вызываемое I<(invocable)>. Символ C<!> является твигилом I<(twigil)>, или выражаясь иначе - вторым сигилом. Твигил является частью имени переменной. В данном случае твигил C<!> подчеркивает что данный атрибут является приватным I<(собсвенным, private)>, то есть недоступен вне класса.
Определение второго атрибута класса C<Task> также содержит приватный твигил:
@@ -164,10 +164,10 @@ C<.> помимо определения атрибута C<$!done> опреде
=end code
Обратите внимание, что это отличается от определения публичного атрибута,
-как это позволяют некоторые языки: и вы действительно получаете недоступную
+как это позволяют некоторые языки: и вы действительно получаете недоступную
снаружи переменную и метод, без необходимости писать этот метод вручную I<(просто заменив C<!> на C<.>)>. Подобный способ хорош пока вам не понадобится более сложные действия, чем просто возврат значения.
-Стоит заметить что твигил C<.> создает метод с доступом к атрибуту только в режиме чтения. Чтобы пользователи этого объекта могли сбросить статус готовности задачи (для выполнения ее например повторно) можно изменить определение атрибута на следующее:
+Стоит заметить что твигил C<.> создает метод с доступом к атрибуту только в режиме чтения. Чтобы пользователи этого объекта могли сбросить статус готовности задачи (для выполнения ее например повторно) можно изменить определение атрибута на следующее:
=begin code
@@ -234,7 +234,7 @@ X<|operators, .>
объекта C<Task>, хранящихся в атрибуте C<@!dependencies> текущего инвоканта.
После того, как все зависимые задачи завершены, наступает время выполнить текущую
-задачу C<Task>. Это производится с помощью прямого вызова атрибута C<&!callback>
+задачу C<Task>. Это производится с помощью прямого вызова атрибута C<&!callback>
( после атрибута указываются круглые скобки). В итоге атрибуту C<$!done> присваивается
значение C<True> ("Истина") и это гарантирует, что при последующем вызове метода
C<perform> этого объекта никаких повторных действий производится не будет.
@@ -309,8 +309,8 @@ X<|bless>
=head1 Наследование
Объектно Ориентированное Программирование определяет концепцию наследования как
-как механизм для повторного использования кода. Perl 6 поддерживает как наследование
-одного класса от другого, так и множественное наследование ( от нескольких классов ).Когда класс наследуется от другого, диспетчер методов следует по цепочке наследования, чтобы определить метод для вызова. Это поведение одинаково как для определенных стандартным способом, с помощью ключевого слова C<method>, так и для генерируемых методов для доступа к свойствам объекта I<(attribute accessors)>.
+механизм для повторного использования кода. Perl 6 поддерживает как наследование
+одного класса от другого, так и множественное наследование ( от нескольких классов ). Когда класс наследуется от другого, диспетчер методов следует по цепочке наследования, чтобы определить метод для вызова. Это поведение одинаково как для определенных стандартным способом, с помощью ключевого слова C<method>, так и для генерируемых методов для доступа к свойствам объекта I<(attribute accessors)>.
=begin code
@@ -434,7 +434,7 @@ X<|bless>
структуру объекта во время выполнения программы. Эта возможность
особенно заметна в языке Objective C, однако имеется во всех языках,
позволяющих манипулировать типами объектов как объектами первого класса.
-Интроспекция может использоваться для реализации полиморфизма. В Java эта возможность называется рефлекцией> процесс сбора информации об объектах в программе во время ее выполнения.
+Интроспекция может использоваться для реализации полиморфизма. В Java эта возможность называется рефлекцией> процесс сбора информации об объектах в программе во время ее выполнения.
Возьмем объект C<$o> класса C<Programmer> и, основываясь на содержимом классов из предыдущей секции, зададим несколько вопросов:
@@ -459,7 +459,7 @@ X<|bless>
=end code
-Первые два теста представляют собой умное сопоставление (smart-match) объекта с именами классов. Если объект того же класса или наследуется от указанного, результатом является истина. Таким образом образом C<$o> является объектом класса C<Employee> или унаследованным от него, но не C<GeekCook>.
+Первые два теста представляют собой умное сопоставление (smart-match) объекта с именами классов. Если объект того же класса или наследуется от указанного, результатом является истина. Таким образом образом C<$o> является объектом класса C<Employee> или унаследованным от него, но не C<GeekCook>.
Метод C<.WHAT> возвращает объект-тип, ассоциированный с объектом C<$o>, который сообщает точный класс. В данном примере - C<Programmer>.
@@ -482,7 +482,7 @@ C<$o.perl> возвращает исполняемую строку кода Per
=head1 Упражнения
-B<1.> Метод C<add-dependency> в классе C<Task> позволяет создавать циклические зависимости
+B<1.> Метод C<add-dependency> в классе C<Task> позволяет создавать циклические зависимости
в графе зависимостей между задачами. Это значит, что если вы будете продвигаться по ссылкам между задачами, то вернетесь к исходной. Таким образом образуется бесконечный цикл и метод C<perform> класса C<Task> никогда не завершиться. Покажите как создать такой граф.
B<Ответ:> Вы можете создать две задачи, а затем "замкнуть" их с помощью метода C<add-dependency> следующим образом:
@@ -546,7 +546,7 @@ B<Answer:> Чтобы обнаружить повторный вызов мет
B<3.> Каким образом объект C<Task> может выполнит зависимые задачи параллельно ?
(Подумайте как можно избежать коллизий в "бриллиантовых зависимостях" I<(Пер. - не встречал ранее такого выражения.)>), когда две разных зависимых задачи требуют выполнения одной).
-B<Ответ:> Включение параллельного выполнения просто: достаточно заменить вызов метода C<.perform()> для C<@!dependencies;> на C<@!dependencies».perform()>. Однако в таком случае могут возникнуть "гонки" I(race conditions) в случае наличия бриллиантовых зависимостей, когда задача C<A> запускает одновременно C<B> и C<C>, а они в свою очередь запускают C<D> (C<D> запускается дважды). Решение этой проблемы такое же как и в случае с циклическими вызовами в вопросе 2 - ввести атрибут C<$!started>. Заметьте, что в случае параллельного выполнения, вызов die в одной из задач может прервать исполнение других.
+B<Ответ:> Включение параллельного выполнения просто: достаточно заменить вызов метода C<.perform()> для C<@!dependencies;> на C<@!dependencies».perform()>. Однако в таком случае могут возникнуть "гонки" I(race conditions) в случае наличия бриллиантовых зависимостей, когда задача C<A> запускает одновременно C<B> и C<C>, а они в свою очередь запускают C<D> (C<D> запускается дважды). Решение этой проблемы такое же как и в случае с циклическими вызовами в вопросе 2 - ввести атрибут C<$!started>. Заметьте, что в случае параллельного выполнения, вызов die в одной из задач может прервать исполнение других.
=begin code
View
2  src/subs-n-sigs.pod
@@ -779,7 +779,7 @@ X<|subsignature>
=head1 Интроспекция/самоанализ
-Подпрограммы и их сигнатуры являются объектами. Кроме использования, имеется возможность некоторые их подробности и детали параметров:
+Подпрограммы и их сигнатуры являются объектами. Кроме использования, имеется возможность узнать некоторые их подробности и детали параметров:
=begin code
Please sign in to comment.
Something went wrong with that request. Please try again.