У меня на районе тьма кофеен, и я как-то пристрастился после обеда выйти прогуляться за чашечкой капучино.
В пяти/десятиминутной доступности у меня примерно десять точек, где можно взять стаканчик.
И вот эти все кофейни, каждый во что горазд, придумывают свои маркетинговые ухищрения. У кого-то каждая шестая или седьмая чашка кофе бесплатно, у кого-то считаются только “на вынос”, у кого-то по номеру телефона, у кого-то по последним четырем цифрам, у кого-то надо печати на карту ставить, кто-то держит карточки у себя под стойкой и ставит галочки. У одной сети кофеен в разных точках отдельные базы и счётчики, поэтому бесплатные чашки не переносятся между точками. У кого-то скидка за инстаграм, у кого-то скидка за “свою” чашку, а у кое-кого за одноразовый стакан наоборот добавляют к сумме счёта. Ещё у одной по достижении 60 чашек присваивается другой уровень лояльности, хотя сильно дешевле не становится, на самом-то деле.
Вот новая кофейня решила выделиться, у них каждая пятая чашка бесплатно. Ну ОК.
В-общем идут на все любые ухищрения, чтобы ты пришёл ещё раз именно к ним.
Так вот, причём тут Microsoft казалось бы…
У меня есть подписка Microsoft 365 для семьи, в Казахстане сейчас стоит 38 990 тенге, пролонгируется автоматически и карта привязана. Срок подходит к концу. Ну думаю, что дороговато, пойду в интернете куплю подешевле. Захожу в учётную запись и там есть кнопка “Выключить периодическое выставление счетов”. Ну думаю отключу, чего уж там.
Жму, а он мне и говорит, хитрюга такая: не отпускай меня, старче, дорогой за себя дам откуп. И предложил добавить два месяца к подписке, анау-мынау.
Ладно, думаю, уговорил, не буду отключать. И два месяца лишних получу к купленным двенадцати, и всё равно чуть позже куплю в интернете процентов на 20-25 дешевле. Вижу цену 29 990 тенге в одном уважаемом местном магазине.
PS.
У них же ещё есть какая-то программа Microsoft Rewards, можно зарабатывать бонусы и тратить. И можно даже поднять уровень своей лояльности:
To reach Level 2 status in Microsoft Rewards, you need to earn 500 points in a single month. Once you reach Level 2, you can earn up to 5,000 points per month. Level 2 members can earn five times more points on Bing.com, save up to 10% on rewards from Microsoft products and services, and get access to exclusive offers. To maintain your Level 2 status, you need to earn at least 500 points per month. As a Level 2 member, you can earn 10 points per dollar spent, plus bonus points, when you make qualifying digital purchases at the Microsoft Store.
Есть в ABAP кое-какие языковые конструкции, отсутствующие в топовых языках, по крайней мере на базовом уровне, например MOVE-CORRESPONDING.
VARYING – это одна из таких конструкций. Я изредка использовал её в базовом варианте:
DATA: BEGIN OF ls_varstr,
cod01 TYPE char20,
cod02 TYPE char20,
cod03 TYPE char20,
cod04 TYPE char20,
END OF ls_varstr.
ls_varstr = VALUE #(
cod01 = '001'
cod02 = '002'
cod03 = '003'
cod04 = '004'
).
DATA: lv_code TYPE char20.
DO 4 TIMES VARYING lv_code FROM ls_varstr-cod01 NEXT ls_varstr-cod02.
WRITE: / lv_code.
ENDDO.
Результат предсказуем:
Но как иногда оказывается, у этой конструкции есть две дополнительных глубины.
Во-первых, можно крутить два поля одновременно:
DATA: BEGIN OF ls_varstr,
cod01 TYPE char20,
val01 TYPE char100,
cod02 TYPE char20,
val02 TYPE char100,
cod03 TYPE char20,
val03 TYPE char100,
cod04 TYPE char20,
val04 TYPE char100,
END OF ls_varstr.
ls_varstr = VALUE #(
cod01 = '001' val01 = 'First'
cod02 = '002' val02 = 'Second'
cod03 = '003' val03 = 'Third'
cod04 = '004' val04 = 'Fofth'
).
DATA: lv_code TYPE char20.
DATA: lv_value TYPE char100.
DO 4 TIMES
VARYING lv_code FROM ls_varstr-cod01 NEXT ls_varstr-cod02
VARYING lv_value FROM ls_varstr-val01 NEXT ls_varstr-val02.
WRITE: / lv_code, '=', lv_value .
ENDDO.
И оказывается так тоже можно, результат не удивит:
А во-вторых, поля в последовательности могут называться как угодно.
Мне раньше казалось, что нумерация в поле очень важна: VAL01, VAL02. Магия! А вот нет. Так тоже можно:
DATA: BEGIN OF ls_varstr,
first TYPE char20,
second TYPE char20,
i-do-not-know TYPE char20,
wtf TYPE char20,
END OF ls_varstr.
ls_varstr = VALUE #(
first = '001'
second = '002'
i-do-not-know = '003'
wtf = '004'
).
DATA: lv_code TYPE char20.
DO 4 TIMES VARYING lv_code FROM ls_varstr-first NEXT ls_varstr-second.
WRITE: / lv_code.
ENDDO.
Если чуть подумать, то станет всё понятнее, как оно было заложено и почему. Могу проиллюстрировать на менее интуитивно понятном примере:
DATA: BEGIN OF ls_varstr,
cod01 TYPE char20,
val01 TYPE char100,
cod02 TYPE char20,
val02 TYPE char100,
cod03 TYPE char20,
val03 TYPE char100,
cod04 TYPE char20,
val04 TYPE char100,
other TYPE text60,
fields TYPE text60,
END OF ls_varstr.
ls_varstr = VALUE #(
cod01 = '001' val01 = 'First'
cod02 = '002' val02 = 'Second'
cod03 = '003' val03 = 'Third'
cod04 = '004' val04 = 'Fofth'
other = 'Other~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'
fields = 'Fields~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'
).
DATA: lv_code TYPE char20.
DATA: lv_value TYPE char100.
DO 5 TIMES
VARYING lv_code FROM ls_varstr-cod01 NEXT ls_varstr-cod02
VARYING lv_value FROM ls_varstr-val01 NEXT ls_varstr-val02.
WRITE: / lv_code, '=', lv_value .
ENDDO.
Обратите внимание на DO 5 TIMES. Ха-ха? Знаете что произойдёт?
Я раньше думал, что сами-знаете-кого не стоит слушать, потому что они лгут (что их там нет, она утонула, если бы хотели отравить, про пенсии, про мобилизацию и тому подобное).
Это вроде как вслушиваться в слова звонящего вам мошенника, который уверяет, что он следователь, что ваши деньги в опасности и их срочно необходимо защитить, перечислив на специальный защищённый счёт.
Потихоньку, пока дети растут, я начал понимать несостоятельность такой аналогии.
Сами-знаете-кто говорят такое, просто чтобы им было удобнее делать то, что они планировали, чтобы внимающие им поменьше шумели и привлекали к себе внимание, а окружение при этом считало бы их приличными людьми.
Я сам часто говорю сам своей двухлетней дочери, что:
мы идём гулять (а не в поликлинику)
больно от укольчика не будет
надо выпить вкусный сиропчик, тогда животик сразу пройдёт
микробы сейчас на тебя ка-а-ак нападут (и я вам покажу откуда)
это самая вкусная каша на свете
этот дяденька очень плохой
это только для взрослых
пульт потерялся
если много смотреть мультики, то можно стать зомби
кукла Маша по тебе скучает
зайчик хочет спать
папа устал
… и тому подобное, и так далее до бесконечности.
Ну как до бесконечности… пока не подрастёт и не начнёт соображать сама.