This shows you the differences between two versions of the page.
Next revision | Previous revision | ||
doc:lara:tips [2022/01/15 19:36] jbispo created |
doc:lara:tips [2022/01/15 20:20] (current) jbispo |
||
---|---|---|---|
Line 1: | Line 1: | ||
====== LARA General Tips ====== | ====== LARA General Tips ====== | ||
+ | ===== Naming Conventions ===== | ||
+ | General Javascript styling guides apply, such as: | ||
+ | * Variable names and functions use camelCase with the first letter in lowercase | ||
+ | * Class names should be nouns, in use CamelCase with the first letter of each internal word capitalized | ||
+ | * Global variables use ALLCAPS | ||
+ | * Private functions/ | ||
+ | |||
+ | LARA-specific constructs have the following rules: | ||
+ | * Aspect names follow the same rules of Classes | ||
+ | * Join point attributes and actions follow the same rules as variable names and functions | ||
+ | |||
+ | |||
+ | /* Furthermore, | ||
+ | |||
+ | We highly recommend that LARA/JS scripts declare a single global variable or class with the same name as the script (e.g., file Query.js/ | ||
+ | |||
+ | |||
+ | ===== Regular Expressions ===== | ||
+ | |||
+ | Lara supports JavaScript regular expressions, | ||
+ | |||
+ | <code lara> | ||
+ | |||
+ | var regex = / | ||
+ | regex.test(" | ||
+ | |||
+ | </ | ||
+ | |||
+ | Since **exec** is a LARA keyword, calling **regex.exec** is not permitted. However, you can access object properties using strings to circumvent this limitation: | ||
+ | |||
+ | <code lara> | ||
+ | |||
+ | (regex[' | ||
+ | |||
+ | </ | ||
+ | |||
+ | Alternatively, | ||
+ | |||
+ | <code lara> | ||
+ | |||
+ | String(' | ||
+ | |||
+ | </ | ||
+ | |||
+ | Or you can also use the **match** boolean operator ( **~=** ): | ||
+ | |||
+ | <code lara> | ||
+ | |||
+ | ' | ||
+ | |||
+ | </ | ||
+ | |||
+ | ===== Importing LARA Files ===== | ||
+ | |||
+ | LARA supports importing LARA files (with extension .lara) that are present in the include path (flag -i) using the keyword **import**. To import a file, you have to use the path to the file from the include folder, using ' | ||
+ | |||
+ | <code lara> | ||
+ | |||
+ | import bar.Aspect; | ||
+ | |||
+ | </ | ||
+ | |||
+ | Import statements must be the first statements in a LARA file. LARA weavers come bundled with support for a set of imports, which are part of their API (e.g., [[http:// | ||
+ | |||
+ | ===== Importing JS Files ===== | ||
+ | |||
+ | JS files that are present in an include path can be imported using the LARA keyword **import**. The same rules of importing of LARA files apply. For instance, if you add as include the folder ~/src-js and you want to import the file ~/ | ||
+ | |||
+ | <code lara> | ||
+ | |||
+ | import bar.Foo; | ||
+ | |||
+ | </ | ||
+ | |||
+ | |||
+ | If the folder contains both a Foo.lara and a Foo.js, both files are imported, first the LARA file, and then the JS file. This can be useful if the JS file needs specific imports (the keyword **import** is LARA-specific and is not supported by native JS), in this case the imports can be declared in a LARA file and the rest of the code in a JS file. If both files are connected, we recommend using the same name for both files, with corresponding extensions (.lara and .js). | ||
+ | |||
+ | Furthermore, | ||
+ | |||
+ | Since LARA scripts are based on an older version of JS (i.e. EcmaScript 5), many recent JavaScript features are not available in LARA code. We recommend using JS files in order to have access to more recent features of JavaScript. | ||
+ | |||
+ | /* Currently the LARA framework supports EcmaScript 2021 for JS files. */ | ||
+ | ===== Reading/ | ||
+ | |||
+ | LARA supports reading from and writing to JSON objects with the object **Io**: | ||
+ | |||
+ | /* <code lara> */ | ||
+ | <code javascript> | ||
+ | import lara.Io; | ||
+ | |||
+ | ... | ||
+ | |||
+ | Io.writeJson(" | ||
+ | var loadedObject = Io.readJson(" | ||
+ | </ | ||
+ | |||
+ | |||
+ | ===== Testing the type of a join point ===== | ||
+ | |||
+ | All join points have the attribute '' | ||
+ | |||
+ | This respects the join point hierarchy (e.g., " |