https://medium.com/@vidhibhatt3008/understanding-different-types-of-programming-case-types-85f5d5608082