Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I simplify the code for multiple nested if else statements

I am currently using the following code for comparison but as you can see, I am making tonnes of if else statements. Is there a way to simplify the code and make it more efficient?

getGenderRef: (grammer=nil) ->
  @gender_ref = ""
  gender = this.get('gender')
  if gender? and gender == 'male'
    if grammer == 'he'
      @gender_ref = 'he'
    else if grammer == 'his'
      @gender_ref == 'his'
    else if grammer == 'him'
      @gender_ref == 'him'
  else if gender? and gender == 'female'
    if grammer == 'he'
      @gender_ref = 'she'
    else if grammer == 'his'
      @gender_ref == 'her'
    else if grammer == 'him'
      @gender_ref == 'her'
  else if gender? or gender == null
    if grammer == 'he'
      @gender_ref = 'he/she'
    else if grammer == 'his'
      @gender_ref == 'his/her'
    else if grammer == 'him'
      @gender_ref == 'him/her'
like image 779
Zhen Avatar asked Jan 26 '26 03:01

Zhen


2 Answers

You could use a map

var rules = {
    'female': {
        'he': 'she',
        'his': 'her',
        // ...
    },
    'male': {
        'he': 'he',
        // ...
    },
    'default': {
        'he': 'he/she'
        // ...
    }
};

this.gender_ref = rules[gender ? gender : 'default'][grammer];

It's extensible and can also be dynamically generated from another backend (e.g. a DB).

Edit (by Linus G Thiel) The same in coffeescript:

rules =
  female:
    he: 'she'
    his: 'her'
    // ...
  male:
    he: 'he'
    // ...
  default:
    he: 'he/she'
    // ...

@gender_ref = rules[gender or 'default'][grammer]
like image 136
Felix Kling Avatar answered Jan 28 '26 17:01

Felix Kling


Use map to cache the possible values. You can extend it at any point and will be able to simplify your method:

var genders = {
    "male" : {
       "he": "he",
       "his": "his",
       "him": "him"
   },
   "female" : {
       "he": "she",
       "his": "her",
       "him": "her" 
   },
   "null": {
      "he": "he/she",
      "his": "his/her",
      "him": "him/her"
   }
}

function getGenderRef (grammer) {
  var gender_ref = "",
      availableGenders = genders[this.get('gender')];

  if (availableGenders) {
      gender_ref = availableGenders[grammer];
  }
}
like image 24
George K Avatar answered Jan 28 '26 15:01

George K



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!