Maintaining a consistent coding conventions helps keep the Stage codebase readable and maintainable. This style guide has been created to guide writing code for the project.
-
Class names are UpperCamelCase
classdef MyAwesomeClass
-
Property names are lowerCamelCase
properties figureHandle settings end
-
Function/method names are lowerCamelCase
function loadSettings(obj)
-
Event names are UpperCamelCase
events SelectedParent end
-
Local variables are lowerCamelCase
function v = getProperty(obj, name) descriptor = obj.getPropertyDescriptor(name); v = descriptor.value; end
-
Use 4 spaces instead of tabs (MATLAB editors default)
-
Separate blocks (properties, events, functions, etc.) with a single blank line
properties someProperty end methods function delete(obj) obj.close(); end function close(obj) obj.someProperty = []; end end
-
Function/method declarations have no space between variables and surrounding brackets/parenthesis and no brackets unless required for multiple outputs
function myFunction() function out = myFunction(obj, in) function [out1, out2, out3] = myFunction(obj, in1, in2)
-
Function/method calls match the spacing format of function declarations
myFunction() out = obj.myFunction(in) [out1, out2, out3] = obj.myFunction(in1, in2)
-
Anonymous functions may have no space between input arguments
@(in1,in2)in1 + in2;
-
Attributes have one space between keyword and attribute specification
properties (Constant, Abstract) methods (SetAccess = protected, Abstract)
-
In general, add a space after commas. Vector/cell indices and anonymous function inputs are possible exceptions.
-
Class comments should immediately follow the classdef line and be indented
classdef MyAwesomeClass % The first sentence is important and should be a concise summary of the class. Now we include some more details and % it starts to flow on to the next line but it's always indented.
-
Function/method comments should immediately follow the function line and be indented
function didSetPersistor(obj) % Override to perform actions after this protocol's persistor is set, e.g. assign property values based on % experiment entities. Note that persistor may be assigned as empty is there is no persistor.
-
Prefer putting property comments on the same line as the property and vertically aligning them with other comments in the same property block
properties One % First public property Two % Second public property end
- Group methods by task (not alphabetically or randomly)
- Classes generally follow this block order:
- Events blocks
- Properties blocks
- Public methods
- Private methods
- Private functions
- Avoid lines over 120 columns (set right-hand text limit to 120 columns in MATLAB preferences)
- Read The Elements of MATLAB Style