Editing Octave style guide

Jump to navigation Jump to search
Warning: You are not logged in. Your IP address will be publicly visible if you make any edits. If you log in or create an account, your edits will be attributed to your username, along with other benefits.

The edit can be undone. Please check the comparison below to verify that this is what you want to do, and then publish the changes below to finish undoing the edit.

Latest revision Your text
Line 11: Line 11:
=== Line Length ===
=== Line Length ===


There is no fixed line length.  In general, strive for clarity and readability and use your own judgement.
Keep the length of source lines to 79 characters or less, for maximum
 
readability in the widest range of environments. This is inherited from
Everyone has access to monitors with more than 80 columns, but even so, exceptionally long lines can be hard to read. However, keeping code together on a line that is logically one unit does improve readability.
the [https://www.gnu.org/prep/standards/standards.html#Formatting GNU Coding Standards].


=== Indentation ===
=== Indentation ===
Line 19: Line 19:
Use only spaces, and indent 2 spaces at a time.
Use only spaces, and indent 2 spaces at a time.


Absolutely '''do not use tabs''' in your code. You should probably set your editor to emit spaces when you hit the tab key.
We use spaces for indentation. Absolutely do not use tabs in your code.
You should probably set your editor to emit spaces when you hit the tab key.


=== Whitespace ===
=== Whitespace ===
===== Function Calls =====


When calling functions, put spaces after commas and before the calling
When calling functions, put spaces after commas and before the calling
Line 39: Line 38:
Here, putting spaces after {{codeline|sin}}, {{codeline|cos}} would result in a
Here, putting spaces after {{codeline|sin}}, {{codeline|cos}} would result in a
parse error.
parse error.
===== Indexing Expressions =====


For indexing expressions, do ''not'' put a space after the
For indexing expressions, do ''not'' put a space after the
Line 52: Line 49:


<pre>A([1:i-1;i+1:n], XI(:,2:n-1))</pre>
<pre>A([1:i-1;i+1:n], XI(:,2:n-1))</pre>
===== Matrix Definition =====


When constructing matrices, prefer using the comma rather than the space to
When constructing matrices, prefer using the comma rather than the space to
Line 63: Line 58:
</pre>
</pre>


However, if the matrix is large or the indentation makes it clear then the comma
However, if the matrix is large or the indentation makes it clear the comma
may be dropped.
may be dropped.


Line 70: Line 65:
             44.04 55.05  6.06];
             44.04 55.05  6.06];
</pre>
</pre>
There is no need to include semicolons to define rows when a newline is used instead.
===== Arithmetic Operators =====


Do include spaces around all binary arithmetic operators, for example
Do include spaces around all binary arithmetic operators, for example
Line 81: Line 72:
</pre>
</pre>


An exception is for extremely simple expressions like
An exception is for extremely simple expressions like <pre>n+1</pre>, in
 
particular when used as an argument to a function or as part of an indexing
<pre>n+1</pre>
expression. For example, you may write
 
In particular, simple expressions used as an argument to a function or as part of an indexing expression usually look better without extra spacing. For example, you may write


<pre>
<pre>
Line 91: Line 80:
</pre>
</pre>


Another exception is for complex arithmetic expressions. It ''may'' improve readability to omit spaces around higher precedence operators, for example
Another exception is for complex arithmetic expressions. It may improve
readability to omit spaces around higher precedence operators, for example


<pre>
<pre>
Line 101: Line 91:
When you encounter an error condition, call the function {{codeline|error}}
When you encounter an error condition, call the function {{codeline|error}}
(or {{codeline|print_usage}}).  The {{codeline|error}} and {{codeline|print_usage}} functions
(or {{codeline|print_usage}}).  The {{codeline|error}} and {{codeline|print_usage}} functions
do not return.
do not return. It is customary to prefix the error message
 
with the name of the function that generated it.  For example:
It is customary to prefix the error message with the name of the function that generated it.  For example:


<pre>error ("my_cool_function: input A must be a matrix");</pre>
<pre>error ("my_cool_function: input A must be a matrix");</pre>


Because the function call to {{codeline|error}} is one code unit, prefer keeping the message on one line even if the message itself is long.
Octave has several functions that produce error messages according
 
to the Octave guidelines.  Consider using {{codeline|inputParser}}
Octave has several functions that produce error messages according to the Octave guidelines.  Consider using {{codeline|inputParser}}
and {{codeline|validateattributes}}.
and {{codeline|validateattributes}}.


== Naming ==
== Naming ==


Use lowercase names if possible.  Uppercase is acceptable for variable names consisting of 1-2 letters.  Do not use mixed case (a.k.a. CamelCase) names.
Use lowercase names if possible.  Uppercase is acceptable for variable
 
names consisting of 1-2 letters.  Do not use mixed case names. Function
Function names must be lowercase.  Function names are global, so choose them wisely.
names must be lowercase.  Function names are global, so choose them
wisely.


=== General naming functions ===
=== General naming functions ===
Line 122: Line 111:
=== Function names ===
=== Function names ===


For most public functions we are limited by Matlab compatibility.  Use whatever name Matlab chose.
For most public functions we are limited by Matlab compatibility.  Use
whatever name Matlab choose.


For functions that are not present in Matlab, favor the use of underscores.
For functions that are not present in Matlab favour the use of underscores.
For example, {{codeline|base64_decode}}, {{codeline|common_size}}, or {{codeline|compare_versions}}.   
For example, {{codeline|base64_decode}}, {{codeline|common_size}}, or
 
{{codeline|compare_versions}}.  There are exceptions to this:
There are exceptions to this:


; Matching C functions
; Matching C functions
Line 137: Line 126:


Avoid reusing the names of other functions as local variable names.  For
Avoid reusing the names of other functions as local variable names.  For
example, avoid naming local variables {{codeline|abs}},
example, try to avoid naming local variables {{codeline|abs}},
{{codeline|log}}, or {{codeline|pow}}.  These names might be used later to try to call the function of that name, but instead will refer to a local variable, leading to very confusing errors.
{{codeline|log}}, or {{codeline|pow}}.  These functions may be used in a
later change and may lead to confusing errors.


An exception is the use of {{codeline|i}} and {{codeline|j}} as loop indices.
An exception is the use of {{codeline|i}} and {{codeline|j}} as loop indices.
Line 200: Line 190:
== ! operator ==
== ! operator ==


* The Octave operator <code>!</code> should be used for logical negation, rather than <code>~</code>.
The Octave operator {{codeline|!}} should be used for logical negation, rather than
* The negation operator is written with a space between the operator and its target, e.g., <code>! A</code>.
{{codeline|~}}. The negation operator is written with a space between the operator
* For comparisons use <code>!=</code> instead of <code>~=</code>.
and its target, e.g., {{codeline|! A}}.
 
Use {{codeline|!=}} instead of {{codeline|~=}}.


== Comments ==
== Comments ==
Line 208: Line 200:
=== # or % ===
=== # or % ===


Always use {{Codeline|#}} to write comments for Octave code.  Only use {{Codeline|%}} if code must run in a dual Matlab/Octave environment.
Always use {{Codeline|#}} to write comments.


Absolutely do not use {{codeline|%#}} or mix {{codeline|%}} and {{codeline|#}}
Absolutely do not use {{codeline|%#}} or mix {{codeline|%}} and {{codeline|#}}
Line 258: Line 250:
The preferred comment mark for places that may need further attention is
The preferred comment mark for places that may need further attention is
with {{codeline|FIXME:}} comments.
with {{codeline|FIXME:}} comments.
[[Category:Development]]
Please note that all contributions to Octave may be edited, altered, or removed by other contributors. If you do not want your writing to be edited mercilessly, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource (see Octave:Copyrights for details). Do not submit copyrighted work without permission!

To edit this page, please answer the question that appears below (more info):

Cancel Editing help (opens in new window)

Template used on this page: