- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
class C
{
val: number;
constructor()
{
this.val = 2;
}
}
function o(val? : C)
{
print(val?.val);
}
function main()
{
o(new C());
o(null);
o();
}
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
−8
class C
{
val: number;
constructor()
{
this.val = 2;
}
}
function o(val? : C)
{
print(val?.val);
}
function main()
{
o(new C());
o(null);
o();
}
Новый говнокод подоспел.... а как тебе такое слабый ужасный С/C++ ... ты так умеешь?
Результат работы:
C:\temp>C:\dev\TypeScriptCompiler\__build\tsc\bin\tsc.exe --emit=jit --opt --shared-libs=C:\dev\TypeScriptCompiler\__build\tsc\bin\TypeScriptRuntime.dll C:\temp\1.ts
2
0
0
Дальше лень, но принцип понятен.
Этого сахерку нету.
Хотя конечно можно поспорить нужен ли он в строго типизированном языке.
Интересно, что получается в случае попытки приделать "хуёвое начало" к слову "хуй". Практически все опрошенные однозначно отвечали "хуюй". Однако, к слову "хуюй" уже ничего не приделаешь: попытка охуить хуюй даёт всё тот же самый хуюй.
Из этого вывод. Если сравнить процедуру хуения с дифференцированием (на каковое она похожа - в частности, и з-за редукций: (грелка)' = (стрелка)' = хуелка, то загадочный ХУЮЙ оказывается чем-то вроде показательной функции с основанием e: (ХУЮЙ)' = ХУЮЙ. Во всяком случае, исключительное место этого лингвистического адаманта, "не искажаемого никакоже", не подлежит сомнению.
Скорее всего, ХУЮЙ - это заклинание, слово Истинной Речи. Думаю, его действие состоит в том, чтобы рассеивать действия иных заклятий, прежде всего злохульных.
Почему 0? А не undefined или null? Где консистентность с жс.
Даже в таком простом примере результат уже не понятен интуитивно. Фича стрёмная, если в пустяках начинаются шарады.
В соседнем треде мы уже выяснили что: There is no int type in Typescript.
А дефолтное значение пельменных в JS — undefined.
1. си: стат типизация нужна компилятору. Программист её реализует, так уж и быть
2. JS: урааа, никакой стат типизации
3. TS: стат типизация нужна программисту. Компилятор её реализует, так уж и быть
Какая типизация )))
Т.е. x?.foo() при x == undefined вернёт undefined и ничего не позовёт?
З.Ы. Уроки тайпскрипта на гк.
AFAIK эту пишутню сперва завезли в C#, а потом и остальные начали внедрять.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Optional_chaining
The optional chaining operator (?.) enables you to read the value of a property located deep within a chain of connected objects without having to check that each reference in the chain is valid.
The ?. operator is like the . chaining operator, except that instead of causing an error if a reference is nullish (null or undefined), the expression short-circuits with a return value of undefined. When used with function calls, it returns undefined if the given function does not exist.
This results in shorter and simpler expressions when accessing chained properties when the possibility exists that a reference may be missing. It can also be helpful while exploring the content of an object when there's no known guarantee as to which properties are required.
Там ещё такой синтаксис для методов
getUser()?.foo?.bar?.buz
Кстати,
>вернёт undefined и ничего не позовёт?
напоминает яблочный nil
Тут нужно сорта говна undefined'a делать:
undefined<indeterminate>
undefined<novalue>
undefined<emptyobjectmethodcall>
Если интересна промежуточная фигня -- можно разбить на более мелкие выражения и проверить на нужных уровнях.
u(gol!
Просто я сперва через va_list хотел нопейсать.