Skip to content
代码片段 群组 项目
coding-standard.md 3.2 KB
更新 更旧
  • 了解如何忽略特定修订
  • Timotej Ecimovic's avatar
    Timotej Ecimovic 已提交
    # Coding Standards
    
    
    Timotej Ecimovic's avatar
    Timotej Ecimovic 已提交
    **Q: How do I deal with `undefined` or `null`?**
    
    **A:** If you deal with a return value that might be null or undefined,
    you should be checking it as:
    
    Timotej Ecimovic's avatar
    Timotej Ecimovic 已提交
    ```
       if ( value == null ) {
           ...
       }
    ```
    
    Timotej Ecimovic's avatar
    Timotej Ecimovic 已提交
    This will evaluate to true if value is either `undefined` or `null`, and will give you a correct result in most cases.
    
    If you are returning a value that is undefined, you should use `undefined`, not `null`.
    
    ---
    
    **Q: How do I deal with asynchronicity?**
    
    **A:** Use promises wherever you can. Any function that can, should return a promise, and NOT do anything sychronous. Think twice before you create a synchronous function, and then don't do it afterwards.
    Asynchronicity is a defining feature of the node.js platform, and the one that contributes the most to it's high performance. So please make the best use of it.
    
    
    Timotej Ecimovic's avatar
    Timotej Ecimovic 已提交
    
    **Q: How do I isolate the DB schema from the rest of the code?**
    
    **A:** All the database schema should be isolated to `src-electron/db` directory. There should be NOTHING that depends on the schema outside of it. That includes:
    
    Timotej Ecimovic's avatar
    Timotej Ecimovic 已提交
    - Any explicit queries in form of a string.
    - Any dependency on specific names of the columns
    - Any dependency on specific names of the tables
    - Any dependency on number of columns or type of columns
    - etc.
    
    This means that when you are doing `SELECT` queries, you should not just pass the returned `rows` to the upper layer, but should map them.
    
    
    Timotej Ecimovic's avatar
    Timotej Ecimovic 已提交
    
    **Q: How do I name things?**
    
    **A:** You name things by observing the following rules:
    
    
    - Files and directories follow kebab-case: meaning lower case, separate with a `-`, as in:
    
    
    Timotej Ecimovic's avatar
    Timotej Ecimovic 已提交
    ```
       src-electron/some-directory/this-is-a-file.js
    ```
    
    
    - Functions follow camel-case: meaning you start with a lower case letter and then uppercase each word, as in:
    
    
    Timotej Ecimovic's avatar
    Timotej Ecimovic 已提交
    ```
       thisIsAFunction()
       anotherFunction()
    ```
    
    Timotej Ecimovic's avatar
    Timotej Ecimovic 已提交
    - Acronyms are NOT uppercased, but treated as a regular words. For example, you will NOT use `convertZCLData()`, instead, you will use `convertZclData()`. Even though ZCL is an acronym, we treat it as a normal word in the code.
    
    
    Timotej Ecimovic's avatar
    Timotej Ecimovic 已提交
    
    **Q: Whitespace?**
    
    
    **A:** VSCode default JS formatter is generally doing a good job, so follow common sense.
    
    Timotej Ecimovic's avatar
    Timotej Ecimovic 已提交
    
    To indent your code and for whitespace separation, you are very strongly advised to use spaces.
    
    
    Using tabs is your choice as a free person, but for each tab found in the code under your name, you will be shipped to a small village 200 miles west of Norilsk, for a month-long reeducation and a stint of hard labor. Siberia is nice this time of year...
    
    ---
    
    **Q: Imports?**
    
    **A:** In back-end node.js code, when importing a module, one should import them using the pattern:
    
    const lowerCaseCamelName = require('relative/path/file.js')
    
    ```
    
    When using functions from these imported modules, one should use the pattern
    
    ```
    
    lowerCaseCamelName.importedFunction()
    
    
    If you are importing just a single symbol from a module, you can also do:
    
    ```
    const { symbol } = require('relative/path/file.js')
    ```
    
    but it's preferable to use the previous syntax, with loading entire module into its own namespace.
    
    You can not use ES6 import/export syntax on the node.js backend.
    
    In front-end java code, using ES6 is ok, as quasar transpiles all that code to a browser standard JS anyway.