Code improvement for DNA reverse complement?

biocyberman via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Mon May 22 04:22:09 PDT 2017


On Monday, 22 May 2017 at 10:35:36 UTC, ag0aep6g wrote:
> On 05/22/2017 10:58 AM, biocyberman wrote:
>> [...]
>
> For reference, here is the version of revComp3 I commented on:
>
> ----
> string revComp3(string bps) {
>     const N = bps.length;
>     enum chars = [Repeat!('A'-'\0', '\0'), 'T',
>                 Repeat!('C'-'A'-1, '\0'), 'G',
>                 Repeat!('G'-'C'-1, '\0'), 'C',
>                 Repeat!('T'-'G'-1, '\0'), 'A'];
>
> [...]

Very illustrative. I could easily miss and I did miss this subtle 
but important aspect. I wonder how D should widen the 'pit of 
success' that Scott Meyers mentioned about more than once. A take 
home message for myself, if one ever use an array as a lookup 
table, make it 'static immutable. And enum array does not make 
sense'. And in Ali's book:

> Consider the hidden cost of enum arrays and enum associative 
> arrays. Define them as immutable variables if the arrays are 
> large and they are used more than once in the program.

One thing also became clear: 'is' is not '=='. Therefore

writeln([10,20] is [10,20]); /* false */
writeln([10,20] == [10,20]); /* true */

I did not notice that because I haven't come across 'is' so often.



More information about the Digitalmars-d-learn mailing list