Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.javascript > #39628
| From | Anton Shepelev <anton.txt@gmail.com> |
|---|---|
| Newsgroups | comp.lang.javascript |
| Subject | input/output parameters |
| Date | 2021-03-13 15:32 +0300 |
| Organization | A noiseless patient Spider |
| Message-ID | <20210313153232.40fa0c8b0adf07d7e807084d@gmail.com> (permalink) |
Hello, all
I started learning JavaScript but yesterday, but am already
stuck at implementing input/output parameters. As I
understand, they are not part of the language, yet I find
them very convenient for normal procedural programming. For
example, they allow returning a boolean flag and using
functions inside `if` tests, similar to the very convenient
TryParse() and TryGetValue() functions in C#:
TryParse: https://docs.microsoft.com/en-us/dotnet/api/system.int32.tryparse
TryGetValue: https://docs.microsoft.com/en-us/dotnet/api/system.collections.generic.dictionary-2.trygetvalue
Unfortunately for me, JavaScript seems to compensate the
lack of in/out parameters with much more complicated
functional and object-oriented mechanisms. I therefore have
tried to implement them myself, but have not come up with a
satisfactory solution. The examples below demonstrate a
function for integer division that stores the result in
variable and returns a boolean value indicating whether the
division was exact:
// for bi-direction in/out parameters, return a code that
// creates an anonymous object storing the the value *and*
// setter clousure:
function out_1(vn)
{ return "x => " + vn + " = x"; }
function int_div_1(a, b ,c)
{ var /*integer */ r; // ratio
var /*boolean */ x; // result is exact
r = Math.floor(a / b);
x = r * b === a;
c( r );
return x;
}
function out_2( vn, val, ret )
{ return `${vn} = ${val}, ${ret}`; }
function int_div_2(a, b, vn)
{ var /*integer */ r; // ratio
var /*boolean */ x; // result is exact
r = Math.floor(a / b);
x = r * b === a;
return out_2(vn, r, x);
}
{ let /*integer */ ratio;
let /*boolean */ exact;
exact = int_div_1(7, 3, eval(out_1("ratio")));
console.log(`7/3: ratio = ${ratio}; exact = ${exact}.`);
exact = int_div_1(6, 3, eval(out_1("r")));
console.log(`6/3: ratio = ${ratio}; exact = ${exact}.`);
exact = eval(int_div_2(7, 3, "ratio"));
console.log(`7/3: ratio = ${ratio}; exact = ${exact}.`);
exact = eval(int_div_2(6, 3, "ratio"));
console.log(`6/3: ratio = ${ratio}; exact = ${exact}.`);
}
Can you think of better way to emulate output parameters,
and preferable also bi-directional input/output parameters?
--
() ascii ribbon campaign -- against html e-mail
/\ http://preview.tinyurl.com/qcy6mjc [archived]
Back to comp.lang.javascript | Previous | Next — Next in thread | Find similar | Unroll thread
input/output parameters Anton Shepelev <anton.txt@gmail.com> - 2021-03-13 15:32 +0300
Re: input/output parameters Jon Ribbens <jon+usenet@unequivocal.eu> - 2021-03-13 15:16 +0000
Re: input/output parameters Anton Shepelev <anton.txt@gmail.com> - 2021-03-14 18:51 +0300
Re: input/output parameters Jon Ribbens <jon+usenet@unequivocal.eu> - 2021-03-14 16:15 +0000
Re: input/output parameters John G Harris <niam@jghnorth.org.uk.invalid> - 2021-03-14 18:31 +0000
Re: input/output parameters Anton Shepelev <anton.txt@gmail.com> - 2021-03-14 22:27 +0300
Re: input/output parameters Jon Ribbens <jon+usenet@unequivocal.eu> - 2021-03-14 23:44 +0000
Re: input/output parameters "Michael Haufe (TNO)" <tno@thenewobjective.com> - 2021-03-15 06:41 -0700
Re: input/output parameters Anton Shepelev <anton.txt@gmail.com> - 2021-03-14 22:17 +0300
Re: input/output parameters Jon Ribbens <jon+usenet@unequivocal.eu> - 2021-03-14 23:28 +0000
Re: input/output parameters "Michael Haufe (TNO)" <tno@thenewobjective.com> - 2021-03-15 06:39 -0700
Re: input/output parameters Ben Bacarisse <ben.usenet@bsb.me.uk> - 2021-03-14 22:32 +0000
Re: input/output parameters "Michael Haufe (TNO)" <tno@thenewobjective.com> - 2021-03-15 06:36 -0700
Re: input/output parameters Anton Shepelev <anton.txt@gmail.com> - 2021-03-20 14:49 +0300
Re: input/output parameters "Michael Haufe (TNO)" <tno@thenewobjective.com> - 2021-03-20 11:59 -0700
Re: input/output parameters "Michael Haufe (TNO)" <tno@thenewobjective.com> - 2021-03-20 13:07 -0700
Re: input/output parameters John G Harris <niam@jghnorth.org.uk.invalid> - 2021-03-20 19:29 +0000
Re: input/output parameters Jon Ribbens <jon+usenet@unequivocal.eu> - 2021-03-20 20:35 +0000
Re: input/output parameters Anton Shepelev <anton.txt@gmail.com> - 2021-03-15 00:27 +0300
Re: input/output parameters Jon Ribbens <jon+usenet@unequivocal.eu> - 2021-03-14 23:51 +0000
Re: input/output parameters Anton Shepelev <anton.txt@gmail.com> - 2021-03-20 14:56 +0300
Re: input/output parameters Jon Ribbens <jon+usenet@unequivocal.eu> - 2021-03-20 15:08 +0000
Re: input/output parameters Anton Shepelev <anton.txt@gmail.com> - 2021-03-21 15:16 +0300
Re: input/output parameters "Michael Haufe (TNO)" <tno@thenewobjective.com> - 2021-03-21 08:46 -0700
Re: input/output parameters Anton Shepelev <anton.txt@gmail.com> - 2021-04-10 14:54 +0300
Re: input/output parameters "Michael Haufe (TNO)" <tno@thenewobjective.com> - 2021-03-20 12:05 -0700
Re: input/output parameters Anton Shepelev <anton.txt@gmail.com> - 2021-03-21 15:58 +0300
Re: input/output parameters "Michael Haufe (TNO)" <tno@thenewobjective.com> - 2021-03-15 06:43 -0700
Re: input/output parameters Silvio <silvio@internet.com> - 2021-03-15 18:01 +0100
Re: input/output parameters John G Harris <niam@jghnorth.org.uk.invalid> - 2021-03-16 18:06 +0000
Re: input/output parameters Silvio <silvio@internet.com> - 2021-03-16 23:58 +0100
Re: input/output parameters John G Harris <niam@jghnorth.org.uk.invalid> - 2021-03-17 19:14 +0000
Re: input/output parameters Silvio <silvio@internet.com> - 2021-03-17 23:46 +0100
Re: input/output parameters John G Harris <niam@jghnorth.org.uk.invalid> - 2021-03-18 18:04 +0000
Re: input/output parameters Silvio <silvio@internet.com> - 2021-03-22 00:39 +0100
Re: input/output parameters John G Harris <niam@jghnorth.org.uk.invalid> - 2021-03-23 10:44 +0000
Re: input/output parameters Silvio <silvio@internet.com> - 2021-03-30 00:33 +0200
Re: input/output parameters John G Harris <niam@jghnorth.org.uk.invalid> - 2021-03-31 19:53 +0100
Re: input/output parameters Silvio <silvio@internet.com> - 2021-04-01 01:17 +0200
Re: input/output parameters John G Harris <niam@jghnorth.org.uk.invalid> - 2021-04-01 18:02 +0100
Re: input/output parameters Anton Shepelev <anton.txt@gmail.com> - 2021-03-20 15:50 +0300
Re: input/output parameters John G Harris <niam@jghnorth.org.uk.invalid> - 2021-03-20 18:52 +0000
Re: input/output parameters Anton Shepelev <anton.txt@gmail.com> - 2021-03-21 17:35 +0300
Re: input/output parameters "Michael Haufe (TNO)" <tno@thenewobjective.com> - 2021-03-21 08:50 -0700
Re: input/output parameters Anton Shepelev <anton.txt@gmail.com> - 2021-03-21 19:31 +0300
Re: input/output parameters John G Harris <niam@jghnorth.org.uk.invalid> - 2021-03-21 19:27 +0000
Re: input/output parameters "Michael Haufe (TNO)" <tno@thenewobjective.com> - 2021-03-20 13:02 -0700
Re: input/output parameters Postiljon Petskin <yyyyyyyyyyyywwwww@zohomail.eu> - 2023-04-22 08:47 -0700
csiph-web