2010-08-19 8 views
2

je suis tombé sur le code suivantjavascript écrit par développeur ruby. besoins refactorisation

function currentSlideFromParams() { 
    var result; 
    if (result = window.location.hash.match(/#([0-9]+)/)) { 
    return result[result.length - 1] - 1; 
    } 
} 

Il est clair que ce code est écrit par un développeur de rubis. Cependant, ce qui est idiomatique ruby ​​n'est pas nécessairement idiome JavaScript. Deuxièmement, le code se plaint lorsque je cours à travers Jslint parce qu'il avertit d'avoir une affectation à l'intérieur du contrôle conditionnel.

S'il vous plaît suggérer le code refactorisé qui est selon l'idiome JavaScript. Il suffit de retirer l'affectation de variable de l'instruction if() pour la remplacer par

Répondre

4
function currentSlideFromParams() { 
    var result = window.location.hash.match(/#([0-9]+)/); 
    if (result) { 
    return result[result.length - 1] - 1; 
    } 
} 

Cela lui attribuer d'abord. Je ne vois pas quel est le problème, cependant ... vous n'avez pas vraiment à obéir aux règles de jslint.

+0

on n'a pas, mais il attrape beaucoup d'erreurs. En outre, il apporte la conformité dans l'équipe afin que l'un d'eux ajoute; et on n'ajoute pas. Maintenant, jQuery a commencé à exécuter son code via jslint. –

2

function currentSlideFromParams() { 
    var result = window.location.hash.match(/#([0-9]+)/); 
    if (result) { 
    return result[result.length - 1] - 1; 
    } 
} 

En outre, si vous prévoyez plusieurs correspondances et recherchez le dernier, vous devez ajouter l'identificateur global g à l'expression rationnelle.

window.location.hash.match(/#([0-9]+)/g) 
0

Il est clair que ce code est écrit par un développeur ruby.

Vraiment? Un rubyist écrirait:

def current_slide_from_params 
    (location.hash =~ /#(\d+)/ && $1).to_i - 1 
end 

qui se traduit:

function currentSlideFromParams() { 
    return (/#(\d+)/.test(location.hash) && RegExp.$1) - 1; 
} 

;)