Skip to content

04. Functions

Cruz Wootten edited this page Apr 2, 2024 · 1 revision

4.1 Implicit return by default

  • Functions return their last expression value. Use that as an implicit return.

    Sqr(X:int):int =
    
         X * X # Implicit return
    
  • If using any explicit returns, all returns in the function should be explicit.

4.2 GetX functions should be

  • Getters or functions with similar semantics that may fail to return valid values should be marked <decides><transacts> and return a non-option type. The caller should handle potential failure.

    GetX()<decides><transacts>:x
    
  • An exception is functions that need to unconditionally write to a var. Failure would roll the mutation back, so they need to use logic or option for their return type.

4.3 Prefer Extension Methods to Single Parameter Functions

  • Use extension methods instead of a function with a single typed parameter.

  • Doing this helps Intellisense. By typing MyVector.Normalize() instead of Normalize(MyVector) it can suggest names with each character of the method name you type. For example:

     (Vector:vector3).Normalize<public>():vector3
    
  • Do not:

      Normalize<public>(Vector:vector3):vector3