| 
	
		
 Я учу JavaScript 
		
		
		
		Здравствуйте, меня зовут Женя  
	Уже довольно долго я работаю с 2д/3д/видео/музыкой и т.д., так сказать креативностью. Но во что то в моей жизни всё таки не хватало. И вот тут то я и познакомился с html 4.01, css2 и начинаю потихоньку осваивать js(уже неделя). Почему именно js а не пхп? Ну пхп мне тоже нравится, кажется легким языком, книжка вот рядом лежит, легко читается, легко понимаю, с моим то правополушарным сознанием :lol: но js мне как то больше нравится в плане дизайна, то есть написал скрипт, а он же клиент сайд (может и сервер сайд есть но я еще об этом не знаю), быстро грузится и графика потрясающая, можно делать красивые вещи. Ну а теперь главный вопрос. Зачем же мне, человеку который всю жизнь занимался искусством, вдруг начал осваивать программирование. Так вот, цель моя совместить все мои навыки 2д, 3д и музыки с программированием, что бы в будущем я мог делать красивые веб приложения, и очень надеюсь, верю, игрушки. Собственно всё :D В основном эта тема будет мой блог+вопрос (извиняюсь если тема не в том разделе). ------------ Сейчас я обучаюсь по видеокурсу Русакова (сцлк) JS. Прошел: Основы JavaScript, Hello World, Переменные, Типы переменных, Операции, Условные операторы. И тут у меня возник один вопрос. Код очень длинный, как можно сделать вот это, короче? Вообще можно сделать его короче?)) 
var age = 23;
		if(age <= 18){
				document.write("За границей говорят что я стар");
			}
			else if (age>18 && age<=30){
				document.write("Да");
			}
			else if (age>31 && age<=50){
				document.write("Я стар");
			}			
			else if (age>51 && age<=80){
				document.write("Я очень стар");
			}
			else if (age > 81){
				document.write("Я superstar");
			}
			else{
				document.write("No age");
			}
	}
 | 
	
		
 Можно придумать некий декларативный способ описания интервалов. Правда получается немаленький оверхед и операторы сравнения фиксированы (хотя можно учесть и это): 
	
var age = 23;
var stages = {
    "За границей говорят что я стар": [-Infinity, 18],
    "Да": [18, 30],
    "Я стар": [30, 50],
    "Я очень стар": [50, 80],
    "Я superstar": [80, Infinity]
};
var message = "No age";
for (var key in stages)
    if (age > stages[key][0] && age <= stages[key][1]) {
        message = key;
        break;
    }
//document.write(message);
alert(message);
 | 
	
		
 Цитата: 
	
 Как записать это в развернутом варианте? так var age = 100; document.write( (age<19)?'За границей говорят что я стар' :(age<31)?'Да' :(age<51)?'Я стар' :(age<81)?'Я очень стар' :'Я superstar'); или так var age = 100; document.write( (age<19)?'За границей говорят что я стар': (age<31)?'Да': (age<51)?'Я стар': (age<81)?'Я очень стар': 'Я superstar');  | 
	
		
 Antarius, "(выражение) ? (действие, если true) : (действие, если false)" - тернарный оператор, аналог if...else 
	 | 
	
		
 Загрузил)))  
	Смотри, у меня тут парочка вопросов сразу появилась) Это массив? 
var stages = {
    "За границей говорят что я стар": [-Infinity, 18],
    "Да": [18, 30],
    "Я стар": [30, 50],
    "Я очень стар": [50, 80],
    "Я superstar": [80, Infinity]
};
Мы такое не проходили еще :D 
var message = "No age";
for (var key in stages)
    if (age > stages[key][0] && age <= stages[key][1]) {
        message = key;
        break;
    }
//document.write(message);
alert(message);
"For" это цикл, а "var key in stages" это даже не могу найти в гугле, но по логике это "этапные ключи" (первый раз слышу про var key in stages), я так полагаю что в учебнике есть эта инфа) Спасибо, движемся дальше :)  | 
	
		
 Цитата: 
	
 
(age < 81 ) ? document.write("Я очень стар") : document.write("Я суперстар");
//если переменная "age" меньше 81 то выходит сообщение "я очень стар", в противном случае "я суперстар"
Сейчас попробую сделать побольше вариантов.  | 
	
		
 Цитата: 
	
 Можно было так: var stages = new Object(); stages.Да = [18, 30]; // тоже что и stages["Да"] stages["Я стар"] = [30, 50]; // тут пробел в ключе, так что вариант с точкой не канает // и т.д... Также ты мог слышать про JSON. Собсно вот это: 
{
    "За границей говорят что я стар": [-Infinity, 18],
    "Да": [18, 30],
    "Я стар": [30, 50],
    "Я очень стар": [50, 80],
    "Я superstar": [80, Infinity]
};
и есть объект, описанный в JSON-нотации (токо Infinity в JSON не проканает, надо поубирать). Цитата: 
	
 Это же for..in цикл. Проходит по всем (почти) ключам объекта. stages - это же наш объект, который мы объявили выше. А var key - это мы объявили переменную, в которой и будут итерироваться ключи (как var i в обычном цикле). Прочитать можно как «для каждого свойства в объекте "stages" выполнить: пусть key будет именем текущего свойства...»  | 
	
		
 Короче его делать просто не нужно. Для такой задачи — адекватный, хорошо читаемый код. Пусть его длина вас не смущает. Попытки сократить приведут к тому, что читаться будет хуже. 
	 | 
	
		
 Antonius, верно. Еще бы хорошо вместо document.write просто менять значение переменной и делать document.write вконце. 
	 | 
	
		
 2 danik.js 
	Почти всё понял, уверен спустя месяц перечитаю всё и пойму еще лучше)) Спасибо большое что отвечаешь) Цитата: 
	
 2 Antonius Ничего себе, похожие ники, похожие :) Ну мне было просто интересно, как можно сократить код, ведь как по мне, чем короче код тем быстрее он работает, я прав да?) Цитата: 
	
  | 
| Часовой пояс GMT +3, время: 15:38. | 
		
  |