Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   как понять строчку кода (http://www.flasher.ru/forum/showthread.php?t=210603)

neonoviiwolf 06.04.2015 13:44

как понять строчку кода
 
Добрый день!
Знаю, вопрос элементарный, но не понимаю строчку кода
Код AS3:

 (bodyType < 0.5) ? this.genCircle() : this.genRectangle();

из этого урока по Box2D

прошу, кому не сложно, посимвольно разобрать, так как вообще не понимаю эту запись

caseyryan 06.04.2015 13:55

&lt; - расшифровывается как less than (обратный символ &gt; greater than). В html символ < заменяют этим кодом, чтобы символ отображался. Здесь эту штуку нужно просто заменить на <
то есть
Код AS3:

(bodyType < 0.5) ? this.genCircle() : this.genRectangle();

А то, что идет дальше ( ? : ) - это называется тернарный, или троичный условный оператор. Знак вопроса можно воспринимать как "тогда", а двоеточие как "иначе". То есть
Код AS3:

если (bodyType < 0.5) тогда this.genCircle() иначе this.genRectangle();


neonoviiwolf 06.04.2015 14:01

т.е. по нашему
Код AS3:

if (bodyType < 0.5){
    this.genCircle()
}else{
    this.genRectangle();
}

это вариант записи на as3? или автор темы намудрил?

EndoCrinologist 06.04.2015 14:14

Он не намудрил. Иногда, когда действий в блоках всего одно можно обойтись без {} и else, используя ? и :

callme 06.04.2015 14:16

Когда автор статьи копировал код на сайт, вкралась ошибка.

Цитата:

&lt; вместо "<"
Плюс почитайте:
https://ru.wikipedia.org/wiki/%D0%A2...86%D0%B8%D1%8F

neonoviiwolf 06.04.2015 14:20

Ок, всем спасибо!

ZackMercury 06.04.2015 16:47

Цитата:

это вариант записи на as3? или автор темы намудрил?
В AS3 тоже есть тернарные операторы.
(condition) ? ifTrue : ifFalse;

Добавлено через 14 минут
Цитата:

Он не намудрил. Иногда, когда действий в блоках всего одно можно обойтись без {} и else, используя ? и :
Если действий в блоках всего одно, то можно написать так:

Код AS3:

if(isDead) resurrect();

Тернарные операторы позволяют упростить чтение свитча из двух действий, и записать это дело в одну строчку.

caseyryan 06.04.2015 17:26

Цитата:

Тернарные операторы позволяют упростить чтение свитча из двух действий
Он делает запись более короткой. Но читаются такие конструкции всегда хуже

ZackMercury 06.04.2015 17:49

Цитата:

Сообщение от caseyryan (Сообщение 1181047)
Он делает запись более короткой. Но читаются такие конструкции всегда хуже

Как привыкнешь - наоборот проще читается.
Правда ещё надо ж оформлять правильно, тогда у тебя проблем не будет с чтением х)

Zebestov 06.04.2015 18:38

Цитата:

Сообщение от ZackMercury (Сообщение 1181044)
Если действий в блоках всего одно, то можно написать так:
Код AS3:

if(isDead) resurrect();


А я и вовсе люблю так:
Код AS3:

isDead && resurrect();


ZackMercury 06.04.2015 18:42

Да, красиво выглядит. Я за)

caseyryan 06.04.2015 19:34

Цитата:

красиво выглядит
Красиво? Коротко - да, красиво - нет. Вот увидишь ты где-то такую запись, ты сразу поймешь, что там происходит? Я честно скажу, что призадумаюсь. А вот если увижу простой условный оператор, то сразу пойму что там и как делается
Цитата:

А я и вовсе люблю так:

Код AS3:

isDead && resurrect();


JS стиль детектыд :D

Zebestov 06.04.2015 19:35

Спорить не стану. Дело привычки. Но я как-то однажды проникся и теперь это читается совершенно однозначно.
Кстати, я сначала использовал это в AS3 и лишь потом перенес в JavaScript! :)

caseyryan 06.04.2015 19:38

Цитата:

Кстати, я сначала использовал это в AS3 и лишь потом перенес в JavaScript!
А я как раз впервые такое увидел в JS. Поначалу вообще не понимал логики таких кодов. Потом привык и уже стало понятнее. Но временами все равно надо поудмать


Часовой пояс GMT +4, время: 02:23.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.