Decorators and Annotations
Dmitry Soshnikov
dmitry.soshnikov at gmail.com
Thu Dec 30 01:52:04 PST 2010
Hello,
What about to have a bit sugar for AOP in Harmony in respect of
*decorators*or (pre/post)
*annotations*?
Python has a common strategy of decorating an annotating methods. E.g.:
def foo(original_fn):
def decorated_fn(x):
print("Log", x)
original_fn(x)
return decorated fn
@foo
def bar(x):
print("bar: ", x)
Thus, a syntax can be chosen any (since `@` is used in Ruby-style for
"instance variables"). Python uses such decorators not only to wrap some
functions (i.e. `@foo def bar ...` is just a sugar for `bar = foo(bar)`) but
also to change a semantics of some methods -- e.g. `@classmethod` decorator,
etc.
Additional info for Pythons decorators:
http://www.python.org/dev/peps/pep-0318/
Also, besides the Python's common decorators, `pre-` and `post-`
`annotations` can be considered.
E.g. (abstract syntax):
[pre checkArguments]
[pre validatePost]
[post formatResponse]
function handleRequest (...args) {
let data = [...]
return data
}
I.e. before entering the `handleRequest` first `checkArguments` and
`validatePost` methods should be called. Then the `handleRequest` itself and
after that `formatResponse`.
Thus, methods-annotations should accept/return a data of a special format.
If e.g. `checkArguments` isn't passed, it should either throw or return a
special `error` data (a signal that other annotation in chain shouldn't
continue). In the successful passing, it just returns handled data which are
passed next to the following annotation/decorator.
Dmitry.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.mozilla.org/pipermail/es-discuss/attachments/20101230/3edf7ccd/attachment.html>
More information about the es-discuss
mailing list