Skip to main content

Procedural Programming with one while and switch cases

A well known folk theorem in computer science is that any program can be transformed into a semantically equivalent program of one procedure containing one switch statement inside a while loop. The transformation involves rewriting the program so that each case of the switch is an elementary operation of the original program followed by an assignment to a program counter variable that communicates to the switch statement the next operation to execute. The while loop terminates when the program counter reaches the last operation in the program.
Well in production code nobody will opt for this style, but I think there might be a case where this could come in handy. Few times there is a use case where we have to generate some unique id based on the customer attributes.  This could used as slug for pretty urls, pseudo-username etc. Recently I had to write a stored procedure (PL/SQL) in Oracle to generate pseudo-usernames for some million email accounts that we had, with usual rules of length and uniqueness. Instead of writing multiple if-else blocks I came up with something like this.

capture

Without making a myriad of  if-else nested conditions, I simply wrote a while with condition that checks if pseudo-username generated is within acceptable norms or not. IF yes then program terminates there returning the uniqId created. Else program continues to go on to case statement for next set of steps to generate a psuedo-username. Key thing to note here is that there is a counter maintain which actually determines the which case statement would be picked in each iteration.
Interesting read : This technique has also been used to produce obfuscated C code that produces popular "Twelve Days of Christmas" poem.

Comments

  1. The article presents an interesting application of a theoretical programming concept that would rarely be chosen as a general production coding style. Using a program counter with a while loop and switch statement provides a structured way to move through different operations until the generated pseudo-username satisfies the required conditions.

    The practical example makes the idea much more meaningful because the goal is not simply to demonstrate an unusual control-flow transformation, but to generate unique identifiers from customer attributes while handling rules such as length and uniqueness. This makes the discussion particularly relevant to Programming Courses, especially when studying control flow, algorithms, and alternative ways of structuring program logic.

    ReplyDelete
  2. I also found the use of a counter to determine which case executes in each iteration interesting. Instead of maintaining a large collection of nested if-else conditions, each case represents another step in the identifier-generation process, while the loop determines whether another step is necessary. This type of server-side logic is relevant to Backend Training, where application logic often has to process and validate data systematically.

    ReplyDelete

Post a Comment

Popular posts from this blog

Guide : Spring Boot with Apache CXF for REST services

In this series of guide, we are going to explore writing REST services with Apache CXF using Spring Boot. The project is build using maven. I assume that you already know how to use maven. Step 1 : Adding dependencies for Spring Boot By default you have to inherit the parent pom of spring boot, but that cannot be followed everytime, so I use an alternative to that. I basically add spring boot pom as dependency so that it brings all the dependencies. <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> <spring.version>1.4.3.RELEASE</spring.version> <cxf.version>3.1.10</cxf.version> </properties> <dependencies> <dependency> <!-- Alternative to inheriting from parent spring pom --> <groupId>org.springframework.boot...

OOPs simply explained

What is OOPs ? It is Object Oriented Programming. It comprises of Polymorphism Encapsulation Inheritance Abstraction Already lost me ? Now here it is read about OOPs as if you deal with it every day. Let's take at OOPs from a Corporate world point of view. There is an organization which comprises of several employees which form a hierarchy. Now every employee has their way of working, some work hard, some like to delegate and some are smart. Though everyone does work in office, they do it in their own way. This is Polymorphism (implementing a function differently while keeping the semantics of function same). Employees are after all humans, we all have secrets. We have our own perspective which we may or may not share with everyone i.e. we have state and behavior only accessible to us. We share some of our secrets with our closest friends, some of our perspective to a group of people depending upon our status. In the end we do keep everything close and private, nothing ...

Resource Pooling

Requirements for Resource Pool: Allow threads to access resources concurrently Should block threads if no resource is available at the moment Maintain a pool of initialized resources to allow reuse and avoid costly initialization of resources Classes from java.util.concurrent package that will be used: ConcurrentLinkedQueue - An unbounded thread-safe queue. This collection is ideal to act as container of resources since it provides concurrent non blocking access to its elements. Semaphore - Semaphore maintains a set of permits by having a counter. This can be used to acquire or release a permit. If no permits are available then acquire() blocks the invoking thread. Implementation Code reference on github: Resource Pooling