HiveBrain v1.2.0
Get Started
← Back to all entries
patternjavascriptMinor

Chemical scheme calculator

Submitted by: @import:stackexchange-codereview··
0
Viewed 0 times
chemicalschemecalculator

Problem

This code implements an algorithm for calculation of chemical schemes. This code looks strange but now I have no idea how to refactor it. Can you give your feedback?

```
eps=0.001;

s1=new Source(1000,0.17);
mx=new Mixer(1000);
mb=new Mem(0.15,0.95);
sp=new Splitter(0.80);
s2=new Sink();
s3=new Sink();

mx.in1=s1.out1;
mx.in2=sp.out2;
mb.in1=mx.out1;
sp.in1=mb.out2;
s3.in1=sp.out1;
s2.in1=mb.out1;

for (i=0;i<50;i++){
mx.calc();
mb.calc();
sp.calc();
}

function Stream(v,c){
this.v=v||null;
this.c=c||null;
this.selfCheck=false;
this.Show=function(){//how to add default values?
return "volume="+this.v+",conc="+this.c+",selfCheck:"+this.selfCheck+"; ";
}
}

function Source(v,c){
this.out1=new Stream(v,c);
this.calc=function(){};
}
function Sink(){
this.in1=null;
this.calc=function(){};
}

function Mixer(fixedV){
this.fv=fixedV;
this.in1=null;
this.in2=null;
this.out1=new Stream();
this.calc=function(){
this.out1.v=this.fv;//||this.in1.v+this.in2.v;
this.in2.v=this.in2.v||0;
this.in2.c=this.in2.c||0;
this.in1.v=this.out1.v-this.in2.v;
this.out1.c =(this.in1.vthis.in1.c+this.in2.vthis.in2.c)/this.out1.v;
this.out1.selfCheck=Math.abs
((this.in1.vthis.in1.c+this.in2.vthis.in2.c)-(this.out1.v*this.out1.c))<eps;
}
}

function Splitter(kS){
this.in1=null;
this.ks=kS||0.05;
this.out1=new Stream();
this.out2=new Stream();
this.calc=function(){
this.out1.v=this.in1.v*(1-this.ks);
this.out2.v=this.in1.v*(this.ks);
this.out1.c=this.in1.c;
this.out2.c=this.in1.c;
}

}

function Mem(kV,kC) {
this.kv = kV||0.15;
this.kc = kC||0.95;
this.in1 = null;
this.out1 = new Stream();
this.out2 = new Stream();
this.calc = function () {
this.out1.v = this.in1.v * this.kv;
this.out1.c = this.in1.c * (1 - this.kc);
this.out2.v = this.in1.v * (1 - this.kv)

Solution

A couple of format rules like:

-
Is a good practice declare first and then use it. Is not a big deal, but is a good practice.

-
Try to use, Pascal Case for constructors, and camelCase for methods.

-
You can replace some repeated function with inheritance javascript

Also, try to don´t abuse of the this. In javascript is a little tricky and can be changed depending of the context.
For default values use

var something = original Value || default Value;


also, last thing most important for your calculator, take a look to the javascript floating points troubles maybe you can get wrong results.

Code Snippets

var something = original Value || default Value;

Context

StackExchange Code Review Q#84195, answer score: 5

Revisions (0)

No revisions yet.