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'
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]
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];
}
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With