Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Какой код более оптимальный? (https://javascript.ru/forum/misc/42591-kakojj-kod-bolee-optimalnyjj.html)

Apollon 01.11.2013 20:06

Какой код более оптимальный?
 
Всем привет!
Я только начал изучать JS и пока практикуюсь, решая не сложные задачи.
Сегодня решал задачу, по условиям которой пользователю предлагается ввести слово. А результатом должен быть вывод на экран фразы, зависящей от количества символов в слове.
Решил ее двумя способами. Подскажите какой вариант более оптимален или правильный и почему.
Первый вариант:
function letterCount (myString) {
if (myString.length < 10){
var result = "Вы ввели меньше 10 символов";
}
else if (myString.length > 10){
var result = "Вы ввели больше 10 символов";
}
else {
var result = "Вы ввели 10 символов";
}
return result;
}
var userWord = prompt('Введите любое слово');
document.write(letterCount(userWord));


Второй вариант:
function letterCount () {
var userWord = prompt('Введите любое слово');
return userWord.length;

}
var res = letterCount();
if (res > 10){
document.write("Вы ввели больше 10 символов");
}
else if(res < 10){
document.write("Вы ввели меньше 10 символов");
}
else {
document.write("Вы 10 символов");
}

danik.js 01.11.2013 22:09

var userWord = prompt('Введите любое слово');
var wordLength = userWord.length;
var message = "Вы ввели_ 10 символов";
var cmp = wordLength > 10 ? ' больше' : wordLength < 10 ? ' меньше' : '';
alert(message.replace('_', cmp));

jsru_ 01.11.2013 22:30

Цитата:

Сообщение от danik.js (Сообщение 279152)
var userWord = prompt('Введите любое слово');
var wordLength = userWord.length;
var message = "Вы ввели_ 10 символов";
var cmp = wordLength > 10 ? ' больше' : wordLength < 10 ? ' меньше' : '';
alert(message.replace('_', cmp));

alert("Вы ввели_ 10 символов".replace('_', (prompt('Введите любое слово').length > 10) ? ' больше' : ' меньше' ));

Aetae 02.11.2013 00:39

Извращенцы.
На деле, в такой мелочи - не принципиально. А как часть чего-то большего - любой из предложенных вариантов неправилен, т.к. и за ввод и за вывод отвечать должны будут отдельные системы.)

jsru_ 02.11.2013 00:56

у автора я бы выбрал второй вариант тк в первом jslint выдаст многократное объявление var как "некомильфо"

BETEPAH 02.11.2013 01:03

Цитата:

Сообщение от jsru_
многократное объявление var

оно там вообще не нужно:
function letterCount (myString) {
	if (myString.length < 10) return 'Вы ввели меньше 10 символов';
	else if (myString.length > 10) return 'Вы ввели больше 10 символов';
	else return 'Вы ввели 10 символов';
}
var userWord = prompt('Введите любое слово');
alert(letterCount(userWord));

danik.js 02.11.2013 03:36

Цитата:

Сообщение от jsru_
у автора я бы выбрал второй вариант тк в первом jslint выдаст многократное объявление var как "некомильфо"

Ну бред же. Это зависит от выбранного стиля кода. var на каждую переменную - довольно частый выбор.

Deff 02.11.2013 06:27

function letterCount (myString) {
 var result = [],
 decTst = parseInt(myString.length/10)?1:0,
 ostTst = (myString.length-10>0)?1:0;

 result[0] = "Вы ввели меньше 10 символов";
 result[2] = "Вы ввели больше 10 символов";
 result[1] = "Вы ввели 10 символов";
 return result[decTst+ostTst];
 }
 var userWord = prompt('Введите любое слово');
 alert(letterCount(userWord));

danik.js 02.11.2013 11:41

Deff, тогда уж так:

function letterCount (string) {
    var diff = string.length - 10,
        sign = diff / Math.abs(diff),
        message = {
            "-1": "Вы ввели меньше 10 символов",
             "0": "Вы ввели 10 символов",
             "1": "Вы ввели больше 10 символов"
        }[sign];
        return message;
}
var userWord = prompt('Введите любое слово');
alert(letterCount(userWord));


Вместо объекта с ключами -1, 0 и 1 можно также использовать массив, но тогда выбирать значение по ключу sign + 1.

Apollon 03.11.2013 14:27

Как часть чего-то большего такой код приемлем?
function game() {
var friend = prompt("Какой друг пришел?");
var myFriend = friend.toLowerCase();

	if(myFriend == "саша" || myFriend == "паша"){
		document.write("Идем играть в бильярд");
	}
	else {
		document.write("Идем играть в тенис");
	}
}
game();


Часовой пояс GMT +3, время: 00:13.