types of conditions in programming