Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 02.12.2013, 20:45
Аватар для Antarius
Интересующийся
Отправить личное сообщение для Antarius Посмотреть профиль Найти все сообщения от Antarius
 
Регистрация: 02.12.2013
Сообщений: 19

Я учу JavaScript
Здравствуйте, меня зовут Женя и я алкоголик, мне 23 года и я 3д художник. (??ты что тут забыл?)
Уже довольно долго я работаю с 2д/3д/видео/музыкой и т.д., так сказать креативностью.
Но во что то в моей жизни всё таки не хватало. И вот тут то я и познакомился с html 4.01,
css2 и начинаю потихоньку осваивать js(уже неделя).
Почему именно js а не пхп? Ну пхп мне тоже нравится, кажется легким языком,
книжка вот рядом лежит, легко читается, легко понимаю, с моим то правополушарным
сознанием но js мне как то больше нравится в плане дизайна,
то есть написал скрипт, а он же клиент сайд (может и сервер сайд есть но я еще об этом не знаю),
быстро грузится и графика потрясающая, можно делать красивые вещи.

Ну а теперь главный вопрос. Зачем же мне, человеку который всю жизнь занимался хернёй
искусством, вдруг начал осваивать программирование. Так вот, цель моя совместить все мои навыки
2д, 3д и музыки с программированием, что бы в будущем я мог делать красивые веб приложения,
и очень надеюсь, верю, игрушки.
Собственно всё

В основном эта тема будет мой блог+вопрос (извиняюсь если тема не в том разделе).

------------
Сейчас я обучаюсь по видеокурсу Русакова (сцлк) 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");
			}
	}
Ответить с цитированием
  #2 (permalink)  
Старый 02.12.2013, 21:25
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 4,664

document.write((age<19)?'За границей говорят что я стар':(age<31)?'Да':(age<51)?'Я стар':(age<81)?'Я очень стар':'Я superstar');
Ответить с цитированием
  #3 (permalink)  
Старый 02.12.2013, 21:45
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Можно придумать некий декларативный способ описания интервалов. Правда получается немаленький оверхед и операторы сравнения фиксированы (хотя можно учесть и это):

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);
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #4 (permalink)  
Старый 02.12.2013, 21:59
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 4,664

Еще вариант:
document.write((age<19)&&'За границей говорят что я стар'||(age<31)&&'Да'||(age<51)&&'Я стар'||(age<81)&&'Я очень стар'||'Я superstar');
Ответить с цитированием
  #5 (permalink)  
Старый 02.12.2013, 22:04
Аватар для Antarius
Интересующийся
Отправить личное сообщение для Antarius Посмотреть профиль Найти все сообщения от Antarius
 
Регистрация: 02.12.2013
Сообщений: 19

Сообщение от Rise Посмотреть сообщение
Еще вариант:
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');

или так
var age = 100;
					document.write(
					(age<19)?'За границей говорят что я стар':
					(age<31)?'Да':
					(age<51)?'Я стар':
					(age<81)?'Я очень стар':
					'Я superstar');
Ответить с цитированием
  #6 (permalink)  
Старый 02.12.2013, 22:11
Аватар для lord2kim
Профессор
Отправить личное сообщение для lord2kim Посмотреть профиль Найти все сообщения от lord2kim
 
Регистрация: 03.05.2011
Сообщений: 848

Antarius, "(выражение) ? (действие, если true) : (действие, если false)" - тернарный оператор, аналог if...else
Ответить с цитированием
  #7 (permalink)  
Старый 02.12.2013, 22:18
Аватар для Antarius
Интересующийся
Отправить личное сообщение для Antarius Посмотреть профиль Найти все сообщения от Antarius
 
Регистрация: 02.12.2013
Сообщений: 19

Загрузил)))
Смотри, у меня тут парочка вопросов сразу появилась)

Это массив?
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);

"For" это цикл, а "var key in stages" это даже не могу найти в гугле, но по логике это "этапные ключи" (первый раз слышу про var key in stages), я так полагаю что в учебнике есть эта инфа)
Спасибо, движемся дальше
Ответить с цитированием
  #8 (permalink)  
Старый 02.12.2013, 22:59
Аватар для Antarius
Интересующийся
Отправить личное сообщение для Antarius Посмотреть профиль Найти все сообщения от Antarius
 
Регистрация: 02.12.2013
Сообщений: 19

Сообщение от lord2kim Посмотреть сообщение
Antarius, "(выражение) ? (действие, если true) : (действие, если false)" - тернарный оператор, аналог if...else
Попробовал, понравилось, спасибо )
(age < 81 ) ? document.write("Я очень стар") : document.write("Я суперстар");
//если переменная "age" меньше 81 то выходит сообщение "я очень стар", в противном случае "я суперстар"

Сейчас попробую сделать побольше вариантов.
Ответить с цитированием
  #9 (permalink)  
Старый 02.12.2013, 23:10
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от Antarius
Это массив?
Это объект. Просто объявлен сразу со всеми ключами в литеральной форме.
Можно было так:
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 не проканает, надо поубирать).


Сообщение от Antarius
"var key in stages" это даже не могу найти в гугле, но по логике это "этапные ключи"
Отдуши посмеялся ) Этапные ключи )))

Это же for..in цикл. Проходит по всем (почти) ключам объекта. stages - это же наш объект, который мы объявили выше. А var key - это мы объявили переменную, в которой и будут итерироваться ключи (как var i в обычном цикле).
Прочитать можно как «для каждого свойства в объекте "stages" выполнить: пусть key будет именем текущего свойства...»
__________________
В личку только с интересными предложениями

Последний раз редактировалось danik.js, 02.12.2013 в 23:14.
Ответить с цитированием
  #10 (permalink)  
Старый 02.12.2013, 23:24
Аспирант
Отправить личное сообщение для Antonius Посмотреть профиль Найти все сообщения от Antonius
 
Регистрация: 30.11.2013
Сообщений: 42

Короче его делать просто не нужно. Для такой задачи — адекватный, хорошо читаемый код. Пусть его длина вас не смущает. Попытки сократить приведут к тому, что читаться будет хуже.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Книга: JavaScript. Сильные стороны Magneto Учебные материалы 16 21.04.2013 15:28
Интерпретатор Java на JS kobezzza Оффтопик 24 11.10.2012 18:32
Первый Moscow JavaScript Meetup korenyushkin Общие вопросы Javascript 0 26.07.2011 15:23
Последние книги по JavaScript! monolithed Учебные материалы 7 26.10.2010 19:40
Выдвет ошибку JavaScript Ромио Opera, Safari и др. 4 21.10.2010 20:34