Skip to content

Instantly share code, notes, and snippets.

@olegpolyakov
Last active April 21, 2020 09:17
Show Gist options
  • Save olegpolyakov/3b28d54f6de0d42521b4013e26044dad to your computer and use it in GitHub Desktop.
Save olegpolyakov/3b28d54f6de0d42521b4013e26044dad to your computer and use it in GitHub Desktop.
The Little JavaScripter

Правда ли что это строковое значение?

'atom'

Да, потому что 'atom' является набором буквенных символов, окруженных ковычками.


Правда ли что это строковое значение?

'1492'

Да, потому что '1492' является набором числовых символов, окруженных ковычками.


Правда ли что это строковое значение?

'*abc$'

Да, потому что '*abc$' является набором специальных и буквенных символов, окруженных ковычками.


Правда ли что это список?

['atom']

Да, потому что строковое значение 'atom' окруженно квадратными скобками.


Правда ли что это список?

['atom', 'turkey', 'or']

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


Правда ли что это список?

['atom', 'turkey'], 'or'

Нет, потому что два значения неокруженны квадратными скобками. Первое значение является списком, состоящим из двух строковых значений, и второе является простым строковым значением.


Правда ли что это список?

[['atom', 'turkey'], 'or']

Да, потому что два значения теперь окружены квадратными скобками и между ними стоит запятая.


Правда ли что это значение?

'xyz'

Да, потому что все строки являются значениями.


Правда ли что это значение?

['x', 'y', 'z']

Да, потому что все списки являются значениями.


Правда ли что это значение?

[['x', 'y'], 'z']

Да, потому что это список.


Правда ли что это список?

['how', 'are', 'you', 'doing', 'so', 'far']

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


Сколько значений в списке и какие они?

['how', 'are', 'you', 'doing', 'so', 'far']

Шесть - 'how', 'are', 'you', 'doing', 'so', 'far'.


Правда ли что это список?

[[['how'], 'are'], [['you'], ['doing', 'so']], 'far']

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


Сколько значений в списке и какие они?

[[['how'], 'are'], [['you'], ['doing', 'so']], 'far']

Три - [['how'], 'are'], [['you'], ['doing', 'so']], 'far'.


Правда ли что это список?

[]

Да, потому что 0 значений окружены в квадратные скобки. Такой список называется "пустым".


Правда ли что это значение?

[]

Да, потому что это список.


Правда ли что это список?

[[], [], [], []]

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

head

Какое значние будет результатом выражения?

head(['a', 'b', 'c'])

'a', потому что head возвращает первое значение списка.


Какое значние будет результатом выражения?

head([['a', 'b', 'c'], 'x', 'y', 'z'])

['a', 'b', 'c'], потому что ['a', 'b', 'c'] является первым значением в списке.


Какое значние будет результатом выражения?

head('hotdog')

TypeError. Строковое значение не является списком.


Какое значние будет результатом выражения?

head([])

undefined. Результатом head для пустого списка является значение undefined.


Какое значние будет результатом выражения?

head([[['hotdogs']], ['and'], ['pickle'], 'relish'])

[['hotdogs']], т.к. это первое значение списка.


Какое значние будет результатом выражения?

head(head([[['hotdogs']], 'and']))

['hotdogs']


Функция head возвращает первый элемент списка. Результатом всегда будет значение. Для пустого списка значнием будет undefined.

function head(list) {
    if (!Array.isArray(list)) throw TypeError('The argument is not a list');
  
    return list[0];
}

tail

Какое значние будет результатом выражения?

tail(['a', 'b', 'c'])

['b', 'c'], потому что tail возвращает элементы списка, за исключением первого.


Какое значние будет результатом выражения?

tail([['a', 'b', 'c'], 'x', 'y', 'z'])

['x', 'y', 'z']


Какое значние будет результатом выражения?

tail([])

[]


Какое значние будет результатом выражения?

tail('hotdogs')

TypeError. Строковое значение не является списком.


Какое значние будет результатом выражения?

tail([])

[]


Функция tail возвращает элементы списка, за исключением первого. Результатом всегда будет новый список. Для пустого списка возвращается пустой список.

function tail(list) {
  if (!Array.isArray(list)) throw TypeError('The argument is not a list');
  
  const [first, ...rest] = list;
  
  return rest;
}

head и tail

Какое значние будет результатом выражения?

head(tail(['b', ['x', 'y'], ['c']]))

['x', 'y'], потому что результатом tail([['b', ['x', 'y'], ['c']]]) будет [['x', 'y'], ['c']], и результатом head([['x', 'y'], ['c']]) будет ['x', 'y'].


Какое значние будет результатом выражения?

tail(tail(['b', ['x', 'y'], ['c']]))

[['c']], потому что результатом tail(['b', ['x', 'y'], ['c']]) будет [['x', 'y'], ['c']], и результатом tail([['x', 'y'], ['c']]) будет [['c']].


Какое значние будет результатом выражения?

tail(head(['a', ['b', ['c']], 'd']))

TypeError, т.к. результатом head(['a', ['b', ['c']], 'd']) будет значение 'a', к которому не применима функция tail.


Что head принимает в качестве аргумента?

Непустой список.


Что tail принимает в качестве аргумента?

Непустой список.

concat

Какое значние будет результатом выражения?

concat(['peanut', 'butter', 'and'], 'jelly')

['peanut', 'butter', 'and', 'jelly'], потому что функция concat соединяет список со значением, получая новый список.


Какое значние будет результатом выражения?

concat(['peanut', 'butter'], ['and', 'jelly'])

['peanut', 'butter', 'and', 'jelly'], потому что функция concat соединяет два списока, получая новый список.


Какое значние будет результатом выражения?

concat([['help'], 'this'], ['is', 'very', [['hard'], 'to', 'learn']])

[['help'], 'this', 'is', 'very', [['hard'], 'to', 'learn']]


Что concat принимает в качестве аргументов?

Два аргумента. Первый - список, второй - значение или список.


Какое значние будет результатом выражения?

concat([], 'a')

['a']


Какое значние будет результатом выражения?

concat([], ['a', 'b', ['c']])

[['a', 'b', ['c']]]


Какое значние будет результатом выражения?

concat('a', ['b', 'c'])

TypeError, т.к. первым аргументом должным быть список.


Какое значние будет результатом выражения?

concat('a', 'b')

Ошибка, т.к. первым аргументом должным быть список.


Функция concat принимает два аргумента, список и значение, и соединяет их, получая новый список в качестве результата.

function concat(list, value) {
  if (!Array.isArray(list)) throw TypeError('The first argument is not a list');
  
  return Array.isArray(value) ? [...list, ...value] : [...list, value];
}

Какое значние будет результатом выражения?

concat(head([['a'], 'b', 'c']), 'd')

['a', 'd']. Почему?


Какое значние будет результатом выражения?

concat(tail([['a'], 'b', 'c']), 'd')

['b', 'c', 'd']. Почему?

isEmpty

Какое значние будет результатом выражения?

isEmpty([])

true, т.к. список пустой.


Какое значние будет результатом выражения?

isEmpty(['a', 'b', 'c'])

false, т.к. список непустой.


Какое значние будет результатом выражения?

isEmpty('spaghetti')

TypeError, т.к. функция isNull не применима к простым значениям.

isPrimitive

Какое значние будет результатом выражения?

isPrimitive('spaghetti')

true, т.к. 'spaghetti' является простым значениям.


Какое значние будет результатом выражения?

isPrimitive(['Harry', 'had', 'a', 'heap', 'of', 'apples'])

false, т.к. ['Harry', 'had', 'a', 'heap', 'of', 'apples'] является простым списком.


Сколько аргументов принимает функция isPrimitive и какие они?

Один. Аргумент должен быть простым значением.


function isPrimitive(value) {
    const type = typeof value;

    return type === 'string' || type === 'number' || type === 'boolean';
}

Какое значние будет результатом выражения?

isPrimitive(head(['Harry', 'had', 'a', 'heap', 'of', 'apples']))

true, т.к. первым значением списка является простое значение 'Harry'.


Какое значние будет результатом выражения?

isPrimitive(tail(['Harry', 'had', 'a', 'heap', 'of', 'apples']))

false, т.к. ['had', 'a', 'heap', 'of', 'apples'] является списком.


Какое значние будет результатом выражения?

isPrimitive(tail(['Harry']))

false, т.к. [] является списком.


Какое значние будет результатом выражения?

isPrimitive(head(tail(['Harry', 'had', 'a', 'heap', 'of', 'apples'])))

true, т.к. ['had', 'a', 'heap', 'of', 'apples'] является списком, а 'had' является простым значением.


Какое значние будет результатом выражения?

isPrimitive(head(tail(['Harry', ['had', 'a'], 'heap', 'of', 'apples'])))

false, т.к. [['had', 'a'], 'heap', 'of', 'apples'] является списком, а ['had', 'a'] является списком.


Правда что значение 'Harry' равняется значению 'Harry'?

Да.


Какое значние будет результатом выражения?

areEqual('Harry', 'Harry')

true, т.к. значения равны.


Какое значние будет результатом выражения?

areEqual('margarine', 'butter')

false, т.к. значения не равны.


Сколько аргументов принимает функция areEqual и какие они?

Два. Оба аргумента должны быть простыми значениями.


Какое значние будет результатом выражения?

areEqual('strawberry', ['strawberry'])

false, т.к. простое значение не равняется списку с этим значением.


Функция areEqual принимает два аргумента. Оба аргумента должны быть простыми значениями.

function areEqual(x, y) {
    return x === y;
}

Какое значние будет результатом выражения?

areEqual(head(['Marry', 'had', 'a', 'little', 'lamb', 'chop']), 'Marry')

true, т.к. 'Marry' равняется 'Marry'.


Какое значние будет результатом выражения?

areEqual(tail(['soured', 'milk']), 'milk')

false, т.к. ['milk'] не равняется 'milk'.


Какое значние будет результатом выражения?

areEqual(head(['beans', 'beans', 'we', 'need', 'jelly', 'beans']), head(tail(['beans', 'beans', 'we', 'need', 'jelly', 'beans'])))

true, т.к. 'beans' равняется 'beans'.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment