My Proposed Lua Style Guide

I don’t know much about how people typically style their Lua code, but I’ve picked a few guidelines I’m going to try to stick to.  They seem consistent with what the Moai SDK uses, and if you end up working with my code, please try to stick to it:

  • Always keep the scope as small as possible, which means marking most things “local”, including local helper functions.
  • Local variables are in camel case, starting with a lowercase character, without any kind of Hungarian notation.  For example “local numberOfItems”.  Since these are local, if you want you can go with “local number_of_items”, since it only affects the scope you are working on, so I don’t care so much.
  • Global variables are in camel case, starting with an uppercase character.  This includes classes and global functions.  For example “SpriteManager = CreateClass()” or “MyGlobalVariable = 1”
  • Keys in tables are in camel case, starting with a lowercase character.  This includes function names in classes.  For example “function SpriteManager:draw()”.
  • File names are all lowercase with underscores separating words.  For example “sprite_manager.lua”.
  • Tabs are 2 spaces.
  • Comment on any global variables that get created in functions.

Other than these items, I am not following an other strict style guide.  I did come across the style guide the Moai developers follow, and it is super long and really specific.  I haven’t found that it is worth it to care so much about such little things.  Also when in doubt, just match the code around what you are working with.

As a general design principle, I am still trying to stick with the general OOP concepts you would use in C++/C#/Java.  I’ve read that the “Lua” way to do things is not do use all these OOP patterns and just keep things as simple as possible, but I can’t imagine that scales well to larger projects, or would be easy to port to other languages.

Of course since I’m just starting out here, things might change, and if you can think of a better way to do things, let me know!

Leave a Reply