Милые шалости тернарного оператора

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

andriano пишет:

wdrakula пишет:

Сорян, конечно, но поскольку не я первый начал, то "руки мои чисты"(с). 

Разве?

Тогда можно указать номер поста, с которого, по твоему мнению, все и началось?

Для меня всё началось с №43, когда ты стал настаивать на своем понимании. После него у меня начался приступ тахикардии и я вскочил снимать кино, не понимая КАК доказать, что белое - это белое.

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

wdrakula пишет:

Для меня всё началось с №43

И именно в нем ты посмел использовать слово "ошибка" в мой адрес. При том, что в рамках сегодняшнего "диспута", не раз самолично написал про свой крайне низкий уровень знаний в вопросе.

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Историю -> в копилку, я щитаю. 

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

Дет, ну если и ты считаешь, что я перегнул, то всем сорри. Простите мою несдержанность!

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

wdrakula пишет:

Для меня всё началось с №43, когда ты стал настаивать на своем понимании. После него у меня начался приступ тахикардии и я вскочил снимать кино, не понимая КАК доказать, что белое - это белое.

А для меня все началось с №41.

Цитирую:

wdrakula пишет:
Сережа! Будь внимательнее при копировании. Ты строчку template<> потерял. Это шаблон. Несколько неожиданно для тебя. За неделю уже вторая странность. Первая была с незнанием понятия "конечная точка".

________

ЗЫ: ты вот скажи: если у тебя появилась ошибка при компиляции, тебе не кажется, что нужно проверить себя в первую очередь??? И не позориться. Фу!

Где присутствуют все три признака перехода от конструктивного диалога к срачу:

1. Переход на личности.

2. Ложные (!) обвинения оппонента в том, что он по собственной невнимательности "потерял" строку.

3. Оскорбления в адрес оппонента.

IMHO 41 < 43. Нет?

kolyn
Offline
Зарегистрирован: 18.01.2019

Второй день! На пустом месте! Утомили  ̶р̶а̶з̶д̶у̶т̶ы̶ы̶м̶ ̶с̶а̶м̶о̶м̶н̶е̶н̶и̶е̶м̶ своей гипечувствительностью!

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

Даааа.... Знатно письками померились. Вынес для себя, что самое главное не забыть куда положил блокнот. Все остальное не интересно. Адриано, на мой взгляд, выглядит выигрышнее.... 

alexbmd
Offline
Зарегистрирован: 15.01.2016

ЕвгенийП пишет:
есть достаточно мест, где применим только он (тернарник) и никакими if'ами его не заменишь

А можно поподробнее раскрыть эту тему?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Что именно Вас интересует?

alexbmd
Offline
Зарегистрирован: 15.01.2016

есть достаточно мест, где применим только он (тернарник) и никакими if'ами его не заменишь

Изначально я, кстати, хотел привести такие примеры, но под конец написания уже устал :-(

^cобственно примеры

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Ну, вот, пара примеров, где тернарный оператор ничем заменить нельзя

Пример #1

//
// инициализация ссылки
//
void setup(void) {
	int dX = 10, dY = 20;
	Serial.begin(57600);
	//
	int & stepVal = digitalRead(5) ? dX : dY;
	//
	Serial.print(stepVal);
}
void loop(void) {}

Пример №2

//
// инициализация члена класса перед конструктором
//
struct SKaka {
	//
	SKaka(void) : m_step(random(0,2) ? 255 : 0) {}
	//
	uint8_t step(void) const { return m_step; }
private:
	uint8_t m_step;
};

void setup(void) {
	Serial.begin(57600);
}

void loop(void) {
	SKaka kaka;
	Serial.println(kaka.step());
	delay(1000);
}

Хватит?

alexbmd
Offline
Зарегистрирован: 15.01.2016

спасибо. а есть гдето чтот вроде summary ваших трудов.  ну те что про память, тернарные и другие уроки так сказать для новичков и не очень. где всё это можно найти ?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

В Песочнице был список ссылок. Почти полный, но на тот момент. С тех пор что-то новое появляется иногда.

Upper
Offline
Зарегистрирован: 23.06.2020

ЕвгенийП пишет:

Ну, вот, пара примеров, где тернарный оператор ничем заменить нельзя

Пример #1

//
// инициализация ссылки
//
void setup(void) {
	int dX = 10, dY = 20;
	Serial.begin(57600);
	//
	int & stepVal = digitalRead(5) ? dX : dY;
	//
	Serial.print(stepVal);
}
void loop(void) {}

А такая замена не подойдет?

void setup(void) {
	int dX = 10, dY = 20;
	Serial.begin(57600);
	//
	int * pTmp = &dX;
	if (digitalRead(5) == 0) {
		pTmp = &dY;
	}
	int & stepVal = *pTmp;	
	//
	Serial.print(stepVal);
}
void loop(void) {}

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Ну, если Вы считаете это заменой, то подойдёт.

SergeiL
SergeiL аватар
Offline
Зарегистрирован: 05.11.2018

ЕвгенийП пишет:

Ну, вот, пара примеров, где тернарный оператор ничем заменить нельзя

Я так понимаю, что это в основном к С++ относится?

А к Си?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

SergeiL пишет:

А к Си?

#27

SergeiL
SergeiL аватар
Offline
Зарегистрирован: 05.11.2018

Спасибо! согласен полностью!

Я в плане про Си: 

ЕвгенийП пишет:

Ну, вот, пара примеров, где тернарный оператор ничем заменить нельзя

Я в свое время смотрел листинги, после компиляции кода на Си и не нашел разницы вплоть до команды процессора. 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Придумать такие примеры для Си, если и возможно, то совсем нетривиально. Правда, не хочу этим заниматься. 

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

Женя! Приме на чистом Си, где есть разница - см. мой последний код в эпическом сраче с Сергеем. ;))

Пример, где заменить нельзя - на Си построить (скорее всего ) просто невозможно. Так как все известные мне примеры на С++ связаны с инициализацией, которая не столь богата на Си.