lambdaway
::
poo4
6
|
list
|
login
|
load
|
|
_h1 classes using functions _p Following [[betterprogramming|https://betterprogramming.pub/functional-solutions-for-classes-in-javascript-7116d12be6b6]] we implement classes using functions. _h2 1) version one _h3 1.1) syntax {pre '{CLASS.new object fields} -> return object '{CLASS.get object field} -> return object's field|value '{CLASS.set object field value} -> return object with field set to value '{CLASS.fields object} -> return object's list of fields '{CLASS.disp object} -> return object's list of field|value } _h3 1.2) creating a cooper {pre 1) defining the class "cooper" '{CLASS.new cooper} -> {CLASS.new cooper} '{CLASS.disp cooper} -> {CLASS.disp cooper} 2) setting and getting new fields: '{CLASS.set cooper price 40000} -> {CLASS.set cooper price 40000} '{CLASS.get cooper price} -> {CLASS.get cooper price} '{CLASS.set cooper speed 230} -> {CLASS.set cooper speed 230} '{CLASS.get cooper speed} -> {CLASS.get cooper speed} '{CLASS.set cooper power 231} -> {CLASS.set cooper power 231} '{CLASS.get cooper power} -> {CLASS.get cooper power} 3) displaying the whole content: '{CLASS.disp cooper} -> {CLASS.disp cooper} } _h3 1.3) creating a juke {pre 1) defining the class "juke" '{CLASS.new juke} -> {CLASS.new juke} '{CLASS.disp juke} -> {CLASS.disp juke} 2) setting and getting new fields: '{CLASS.set juke price 30000} -> {CLASS.set juke price 30000} '{CLASS.set juke speed 180} -> {CLASS.set juke speed 180} '{CLASS.get juke price} -> {CLASS.get juke price} '{CLASS.get juke speed} -> {CLASS.get juke speed} 3) displaying the whole content: '{CLASS.disp juke} -> {CLASS.disp juke} } _h3 2.2) creating a "fiat" {pre 1) defining the class "fiat": '{CLASS.new fiat} -> {CLASS.new fiat} 2) setting and getting new fields: '{CLASS.set fiat price 20000} -> {CLASS.set fiat price 20000} '{CLASS.get fiat price} -> {CLASS.get fiat price} '{CLASS.set fiat speed 150} -> {CLASS.set fiat speed 150} '{CLASS.get fiat speed} -> {CLASS.get fiat speed} '{CLASS.set fiat color red} -> {CLASS.set fiat color red} '{CLASS.get fiat color} -> {CLASS.get fiat color} 3) displaying the whole content: '{CLASS.disp fiat} -> {CLASS.disp fiat} } _h3 2.3) creating a "rect" {pre 1) defining the class "rect": '{CLASS.new rect} -> {CLASS.new rect} 2) setting and getting new fields: '{CLASS.set rect p0 {lambda {} {A.new 100 100}}} -> {CLASS.set rect p0 {lambda {} {A.new 100 100}}} '{{CLASS.get rect p0}} -> {{CLASS.get rect p0}} '{CLASS.set rect p1 {lambda {} {A.new 200 200}}} -> {CLASS.set rect p1 {lambda {} {A.new 200 200}}} '{{CLASS.get rect p1}} -> {{CLASS.get rect p1}} '{CLASS.set rect color red} -> {CLASS.set rect color red} '{CLASS.get rect color} -> {CLASS.get rect color} 3) computing area: '{CLASS.set rect area {lambda {} {* {- {A.first {{CLASS.get rect p1}}} {A.first {{CLASS.get rect p0}}}} {- {A.last {{CLASS.get rect p1}}} {A.last {{CLASS.get rect p0}}}} } }} -> {CLASS.set rect area {lambda { } {* {- {A.first {{CLASS.get rect p1}}} {A.first {{CLASS.get rect p0}}}} {- {A.last {{CLASS.get rect p1}}} {A.last {{CLASS.get rect p0}}}} } }} '{{CLASS.get rect area}} -> {{CLASS.get rect area}} '{CLASS.disp rect} -> {CLASS.disp rect} } _h2 3) javascript code _p A single function {pre °° var create = function() { return { get: function(a) { return this[a] }, set: function(a,v) { this[a] = v }, fields: function() { var list = "{b fields:}"; for (var f in this) if (this.hasOwnProperty(f)) list += "\n" + f return list }, disp: function() { var list = "{b content:}"; for (var f in this) if (this.hasOwnProperty(f) && (typeof this[f] !== "function")) list += "\n" + f + ": " + this[f] return list } } }; °°} _p and the set of interfaces with lambdatalk {pre °° var HASH = {}; LAMBDATALK.DICT["CLASS.new"] = function() { // {CLASS.new obj} var args = arguments[0].trim().split(" "); HASH[args[0]] = create( args[1], args[2] ); return args[0] }; LAMBDATALK.DICT["CLASS.get"] = function() { // {CLASS.get obj field} var args = arguments[0].trim().split(" "); return HASH[args[0]].get( args[1] ) }; LAMBDATALK.DICT["CLASS.set"] = function() { // {CLASS.get obj field value} var args = arguments[0].trim().split(" "); HASH[args[0]].set( args[1], args[2] ); return args[0] }; LAMBDATALK.DICT["CLASS.fields"] = function() { // {CLASS.fields obj} var args = arguments[0].trim(); return HASH[args].fields() }; LAMBDATALK.DICT["CLASS.disp"] = function() { // {CLASS.disp obj} var args = arguments[0].trim(); return HASH[args].disp() }; °°} {script var create = function(name, surname) { return { get: function(a) { return this[a] }, set: function(a,v) { this[a] = v }, fields: function() { var list = "{b fields:}"; for (var f in this) if (this.hasOwnProperty(f)) list += "\n" + f return list }, disp: function() { var list = "{b content:}"; for (var f in this) if (this.hasOwnProperty(f) && (typeof this[f] !== "function")) list += "\n" + f + ": " + this[f] return list } } }; var HASH = {}; LAMBDATALK.DICT["CLASS.new"] = function() { // {CLASS.new object} var args = arguments[0].trim().split(" "); HASH[args[0]] = create( args[1], args[2] ); return args[0] }; LAMBDATALK.DICT["CLASS.get"] = function() { // {CLASS.get object field} var args = arguments[0].trim().split(" "); return HASH[args[0]].get( args[1] ) }; LAMBDATALK.DICT["CLASS.set"] = function() { // {CLASS.get object field value} var args = arguments[0].trim().split(" "); HASH[args[0]].set( args[1], args[2] ); return args[0] }; LAMBDATALK.DICT["CLASS.fields"] = function() { // {CLASS.fields object} var args = arguments[0].trim(); return HASH[args].fields() }; LAMBDATALK.DICT["CLASS.disp"] = function() { // {CLASS.disp object} var args = arguments[0].trim(); return HASH[args].disp() }; }
lambdaway v.20211111