В настоящее время я пытаюсь решить уроки 0–4 из c0d3, используя как JavaScript, так и Go. Уроки состоят из набора алгоритмов, направленных на то, чтобы убедиться, что у вас есть прочный фундамент основ JavaScript. Я уже прошел эти уроки, используя JavaScript, так что эта часть просто напоминание. Но попытки решить их в Go - это ново и, честно говоря, раздражает af 😒.

Потрясающий парень, создавший c0d3, решил, что было бы весело учиться, если бы люди решали алгоритмы рекурсивно (ну, те, которые можно решать рекурсивно, то есть). И я попытался сделать то же самое с Go. Именно тогда я наконец начал понимать, почему люди называют го «прагматичным» языком. Я постараюсь поделиться тем же мнением, показав вам разницу между алгоритмами, которые я рекурсивно решил с помощью JavaScript ES6, и алгоритмами, которые я убил t с помощью Go.

Q1. Write a function that takes in 2 numbers, return a function that takes in a number that returns the sum of all 3 numbers when called.

Итак, этот obvi не является алгоритмом, требующим рекурсии. Но я хотел показать вам, ребята, синтаксис возврата функции, прежде чем погрузиться в рекурсивные решения.

Как видите, основное отличие заключается в том, что JS выглядит коротким и чистым; обычная стрелочная функция, напрямую возвращающая другую стрелочную функцию, в то время как Go выглядит как лишнее. Это типы.

В Go для объявления функции необходимо указать типы списка параметров, а также типы списка результатов / возврата, если он ›1. Это связано с тем, что Go - это язык со статистической типизацией ( тип переменной проверяется и сохраняется во время компиляции). В нашем случае это означает, что нам нужно не только сообщить компилятору, какой тип имеет каждая переменная, но и убедиться, что эта переменная, параметр или список результатов соответствует сохраненный тип во всей нашей программе, иначе он даже не запустится 😓.

Нам не нужно было этого делать с нашим JS-решением, потому что JavaScript считается языком с динамической типизацией (типы не проверяются до запуска программы). Другими словами, переменные получают свой тип после того, как им присвоено значение. Причина, по которой типы не проверяются и не сохраняются, как в Go, заключается в том, что им разрешено изменять во время выполнения. Вот пример, который поможет понять суть дела:

Обратите внимание, как я мог делать то, что, черт возьми, хотел, с этими переменными в JS. А теперь сделаем то же самое в Go.

Выполнение указанной выше программы приводит к следующей ошибке.

invalid operation: a + b (mismatched types string and int)

Хорошо, моя цель в этом блоге - подчеркнуть важность типов, когда дело доходит до решения алгоритмов в Go. Теперь мы лучше подготовлены, чтобы увидеть различия между алгоритмами, которые я рекурсивно решил с помощью ES6 JS и Go, а также лучше понять, почему именно критики сплетничают о прагматических характеристиках Go. Мы сделаем это в следующем блоге.

На сегодня все,

Хорошо, увидимся завтра! Но если вы хотите оставаться на связи до тех пор, поймайте меня в 💁 Twitter, Youtube или Instagram.