Escapist Marginalia

rational

Rational is rational numbers library written in TypeScript

Starting point

This project’s starting point goes way back to the distant path, dating back before I became a web-developer. At that time I was learning the basics of python language (things did not go further than basics). Becoming familiar with OOP I have got the idea of implementing the rational numbers support. At that moment python provided built-in Fraction module, but the interface seemed to basic for me.

Quite possible considering the language, the problem, and existing module, I was reinventing the wheel. At that moment it should not be a problem, in my opinion. The task seemed to be possible for my level and it was really interesting for me.

The project was finished and I was pleased with the result. Thanks to the project I learned more about OOP and python itself. Obviously, the project was not published and was completely forgotten deep in file system of my laptop.

Second encounter

After quite a while, as can be seen in most of my projects, I decided to come back to the project. There were some rationale behind this decision. At that moment I was on my way to become a web-developer and the language I was using to do the job was (what a surprise!) JavaScript, and I already had some experience of planning and deploying projects.

Most importantly, JavaScript do not have a rational numbers support. And I was thinking that it would be a nice idea to create a library for it. I could get some experience, refresh the knowledge of more or less simple math topic. And, maybe, just maybe if a library turned out to be good, the community may find it useful.

So, I have decided to implement a library, call it rational and publish it on npm.

The process

The development process was quite pleasing and productive. I have already got the experience of package publishing and other stuff required to do the job.

Before the work I did some research, learned from existing libraries what does such a library should have under it’s belt to be competitive. After that the interface was planned and it was developed using TypeScript.

As a result, the zipped package was just a 2 kb in size, it seemed like a really good result considering the functionality was built in.

User input

More or less most such a libraries has the same interface. You can create instances and make some operations. You can read what a rational can do in documentation. But I would like to highlight the flexibility of user input:

What makes it even greater the same user input can be used in most methods where another rational instance would be required.

Summarizing

The project itself cannot be considered something outstanding; any developer with a couple of years experience can easily write such a project. However, I was pleased with the result considering my self-criticism and attention to details.

The library is packed with types, the user input types are included for a developer, covered with unit tests, has a good documentation and a functionality covering all needs you may need working with rational numbers. In case a developer need something specific, library is naturally extendable and written using modern JavaScript syntax.

There are some limitations considering the Number data type. I was considering using BigInt instead, but I had doubts that people may need such an extreme values using this library and the performance dropped significantly (up to 10x).

There are some plans for this project to be a part of some other educational projects in future. The project itself is maintained and always is up to date.