Optional Parameter in User Function.
06-14-2021, 09:03 PM (This post was last modified: 06-14-2021 09:10 PM by matalog.)
Post: #1
 matalog Member Posts: 211 Joined: May 2021
Optional Parameter in User Function.
Is there anyway to set an optional paramater in a User created function?

I use the following all day, to convert feet to inches:

Code:
EXPORT F2M(A,B) BEGIN  C:=A/3.28084;  D:=B/39.3701;  E:=C+D;  RETURN ROUND(E,2); END;

I press a user defined key that types into F2M() for me, and leaves the cursor in the brackets, which is very convenient.

Quite often, I do not need to input any inches, and therefore would like to be able to set B as an optional parameter/variable in the function, where the function will default B to Zero when it is not input. The function will currently not run if I do not enter a value for A, and a value for B. F2M(6,2) is an accepted input, but F2M(10) will not work, and I would like it to, instead of having to type F2M(10,0).
06-14-2021, 09:24 PM (This post was last modified: 06-14-2021 11:24 PM by StephenG1CMZ.)
Post: #2
 StephenG1CMZ Senior Member Posts: 945 Joined: May 2015
RE: Optional Parameter in User Function.
Not in the current product, but I understand this is possible in the beta release.
Currently, one workaround is to use lists:

Outline only:
Export feet(LST)
If size(LST) ==1...LST(1)
IF SIZE(LST)== 2...LST(1)+LST(2)
Call: feet({5}) or feet({5,6}

Stephen Lewkowicz (G1CMZ)
06-14-2021, 09:28 PM
Post: #3
 matalog Member Posts: 211 Joined: May 2021
RE: Optional Parameter in User Function.
(06-14-2021 09:24 PM)StephenG1CMZ Wrote:  Not in the current product, but I understand this is possible in the beta release.

I think I am running the beta release, is it documented anywhere?
06-14-2021, 09:40 PM (This post was last modified: 06-14-2021 09:46 PM by Albert Chan.)
Post: #4
 Albert Chan Senior Member Posts: 2,100 Joined: Jul 2018
RE: Optional Parameter in User Function.
We could use complex numbers ... (just think of i as inches)

Code:
EXPORT F2M(z) BEGIN   ROUND((re(z)*12+im(z))*0.0254, 2); END;

> F2M(6+2i) ﻿ ﻿ ﻿ ﻿ ﻿ ﻿ → 1.88
> F2M(10) ﻿ ﻿ ﻿ ﻿ ﻿ ﻿ ﻿ ﻿ ﻿ → 3.05
06-14-2021, 09:56 PM (This post was last modified: 06-14-2021 09:56 PM by matalog.)
Post: #5
 matalog Member Posts: 211 Joined: May 2021
RE: Optional Parameter in User Function.
(06-14-2021 09:40 PM)Albert Chan Wrote:  We could use complex numbers ... (just think of i as inches)

Code:
EXPORT F2M(z) BEGIN   ROUND((re(z)*12+im(z))*0.0254, 2); END;

> F2M(6+2i) ﻿ ﻿ ﻿ ﻿ ﻿ ﻿ → 1.88
> F2M(10) ﻿ ﻿ ﻿ ﻿ ﻿ ﻿ ﻿ ﻿ ﻿ → 3.05

That allows what I am asking for, but it makes it quite a bit less convenient to enter feet and inches, it now requires 6 + 2 (shift) 2 (5 keys). Before it just required typing 6 , 2 (just 3 keys).

I am grateful for your input, but this is about increasing convenience, and reducing the total amount of keys required to press, because of how often the function is used, therefore, it isn't really a viable solution.
06-14-2021, 09:58 PM (This post was last modified: 06-14-2021 10:02 PM by Didier Lachieze.)
Post: #6
 Didier Lachieze Senior Member Posts: 1,539 Joined: Dec 2013
RE: Optional Parameter in User Function.
(06-14-2021 09:28 PM)matalog Wrote:
(06-14-2021 09:24 PM)StephenG1CMZ Wrote:  Not in the current product, but I understand this is possible in the beta release.

I think I am running the beta release, is it documented anywhere?

From the additional documentation referenced here:
Quote:Multiple functions with the same names, but different parameter count
It is now possible to have more than one function in a program with the same name, as long as the parameter count is different.

So you can have two functions F2M(A,B) and F2M(A), with:

Code:
EXPORT F2M(A) BEGIN  F2M(A,0); END;

This way F2M(6,2) or F2M(10) will both work.
06-14-2021, 10:08 PM
Post: #7
 Albert Chan Senior Member Posts: 2,100 Joined: Jul 2018
RE: Optional Parameter in User Function.
(06-14-2021 09:56 PM)matalog Wrote:  That allows what I am asking for, but it makes it quite a bit less convenient to enter feet and inches, it now requires 6 + 2 (shift) 2 (5 keys). Before it just required typing 6 , 2 (just 3 keys).

Can you setup user defined key to produce "F2M((" ?

> F2M((6,2 ﻿ ﻿ ﻿ ﻿ ﻿ ﻿ → 1.88
> F2M((10 ﻿ ﻿ ﻿ ﻿ ﻿ ﻿ ﻿ → 3.05
06-14-2021, 10:10 PM
Post: #8
 matalog Member Posts: 211 Joined: May 2021
RE: Optional Parameter in User Function.
(06-14-2021 09:58 PM)Didier Lachieze Wrote:
(06-14-2021 09:28 PM)matalog Wrote:  I think I am running the beta release, is it documented anywhere?

From the additional documentation referenced here:
Quote:Multiple functions with the same names, but different parameter count
It is now possible to have more than one function in a program with the same name, as long as the parameter count is different.

So you can have two functions F2M(A,B) and F2M(A), with:

Code:
EXPORT F2M(A) BEGIN  F2M(A,0); END;

This way F2M(6,2) or F2M(10) will both work.

That's exactly what I want, thanks a lot.
06-15-2021, 03:24 AM
Post: #9
 Wes Loewer Senior Member Posts: 416 Joined: Jan 2014
RE: Optional Parameter in User Function.
Here's a thread that details both methods of using optional arguments: