Skip to content

Commit

Permalink
fix function overload description
Browse files Browse the repository at this point in the history
  • Loading branch information
bondiano committed Jan 8, 2023
1 parent 78ebd52 commit a76f430
Showing 1 changed file with 7 additions and 7 deletions.
14 changes: 7 additions & 7 deletions modules/20-functions/85-function-overloads/description.ru.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,12 @@ theory: |
function concat(a: number, b: number): string;
function concat(a: string, b: string): string;
function concat(a: any, b: any): string {
if (typeof a === 'string') {
return `${a}${b}`;
} else {
function concat(a: unknown, b: unknown): string {
if (typeof a === 'number') {
return `${a.toFixed()}${b.toFixed()}`;
}
return `${a}${b}`;
}
concat('one', 'two'); // onetwo
Expand All @@ -24,9 +24,9 @@ theory: |
Здесь определяется одна функция `concat()`, у которой две версии, одна принимает на вход два числа, другая две строки. Обе версии выполняют конкатенацию, но делают это по-разному. Строки конкатенируются сразу, а вот у чисел сначала отбрасывается дробная часть.
Реализация поведения для обеих версий делается в третьей функции с тем же именем, но с таким описанием параметров, которое подойдет под каждую версию функции. В примере выше типы параметров определены как `any`, что дает возможность вызывать функцию как со строками, так и с числами.
Реализация поведения для обеих версий делается в третьей функции с тем же именем, но с таким описанием параметров, которое подойдет под каждую версию функции. В примере выше типы параметров определены как `unknown`, что дает возможность вызывать функцию как со строками, так и с числами.
Вся логика, для всех версий функций описывается в этом последнем определении. То по какой ветке идти, делается с помощью проверки типов. В примере выше достаточно проверить тип только первого параметра, так как второй в таком случае точно будет строкой. Это обеспечивает система типов и компилятор.
Вся логика для всех версий функций описывается в этом последнем определении. То по какой ветке идти, делается с помощью проверки типов. В примере выше достаточно проверить тип только первого параметра, так как второй в таком случае точно будет строкой. Это обеспечивает система типов и компилятор.
Перегрузка функций не ограничивается двумя версиями. Версий может быть сколько угодно, главное то, что в конце всегда описывается функция, которая является общей по параметрам для всех вариантов и внутри которой описывается вся логика для каждого варианта.
Expand All @@ -36,7 +36,7 @@ theory: |
function add(a: string, b: string): string;
// Сигнатура подходит под все примеры выше
function add(a: any, b: any, c?: number): unknown {
function add(a: unknown, b: unknown, c?: number): unknown {
// тут вся логика
if (c === undefined) {
// ...
Expand Down

0 comments on commit a76f430

Please sign in to comment.