Здравствуйте, Serginio1, Вы писали: S> А мне кажется, что знание Котлина или C# позволяет значительно быстрее освоить TypeScript. Учитывая аннотацию типов и сближение конструкций C#, учитывая общего для них создателя Хейлсберга
К сожалению, я не знаю ни Котлина (это вроде подмножество Java для Android?), ни C#. Мое первое сообщение в этой теме основано на том, что, начав изучать JavaScript, я уже через неделю, несмотря на весьма слабое знание этого языка, довольно-таки уверенно решал на нем тренировочные задачи, тогда как в случае с Python промежуток между началом изучения языка и переходом к практикуму измерялся месяцами.
P.S. Дабы не быть голословным...
Одна из первых задач, которую я решил на JavaScript:
/**
* @param {string[]} words
* @return {string}
*/
var longestWord = function(words) {
totalWords = words.length;
words.sort(function(a, b) { // Sort by word length
return a.length - b.length;
});
var wordLen = 0;
var maxLen = words[totalWords-1].length;
var wordsByLen = new Array(maxLen);
for (i in words) {
j = words[i].length - 1;
wordsByLen[j] = wordsByLen[j] || [];
wordsByLen[j].push(words[i]);
};
wordsByLen2 = new Array(maxLen);
wordsByLen2[0] = new Set(wordsByLen[0])
// for (i = 0; i < wordsByLen2.length; i++) {
for (i = 1; i < wordsByLen2.length; i++) {
wordsByLen2[i] = new Set();
}
var tryout = function(level, word, arr, arr2) {
maxLen = arr.length;
if (level < maxLen - 1) {
for (j in arr[level+1]) {
if (word == arr[level+1][j].slice(0, level+1)) {
if (!arr2[level+1].has(arr[level+1][j])) {
arr2[level+1].add(arr[level+1][j]);
tryout(level+1, arr[level+1][j], arr, arr2);
}
}
}
}
}
for (i in wordsByLen[0]) {
tryout(0, wordsByLen[0][i], wordsByLen, wordsByLen2);
}
if (!wordsByLen2[0]) {
return "";
};
var longestWord = "";
var word = "";
for (i = 0; i < wordsByLen2.length; i++) {
if (wordsByLen2[i]) {
for (word of wordsByLen2[i]) {
if (!longestWord || longestWord.length < word.length || longestWord > word) {
longestWord = word;
}
};
} else {
break;
}
}
return longestWord;
};
Здравствуйте, Lazytech, Вы писали: L>Интересно, это только мне одному кажется, что знание основ Python позволяет значительно быстрее освоить такой непохожий на него язык, как JavaScript, и писать на нем более эффективный код?
А про темную сторону JavaScript тебе еще не рассказали?
Довольно баянистая, зато отражающая правду жизни картинка.
Здравствуйте, Privalov, Вы писали:
P>А про темную сторону JavaScript тебе еще не рассказали?
На этот случай в JavaScript есть Number(), parseInt(), parseFloat(), toString() и т. д. Я уже привык к тому, что свойства объекта — строки (даже если с виду это числа), тогда как индексы массива — просто числа.
Здравствуйте, morgot, Вы писали:
M>Здравствуйте, Lazytech.
M>Питон не нужен. Абсолютно бесполезный язык, приучающий программиста считать пробелы и табы, а не думать над кодом.
Вот другое мнение сложилось: думать над кодом, но не/редко думать как это дальше будет саппортится.
Здравствуйте, Lazytech, Вы писали:
L>На этот случай в JavaScript есть Number(), parseInt(), parseFloat(), toString() и т. д. Я уже привык к тому, что свойства объекта — строки (даже если с виду это числа), тогда как индексы массива — просто числа.
L>P.S. Ах да, есть же еще булевы переменные.
Здравствуйте, morgot, Вы писали:
M>Питон не нужен. Абсолютно бесполезный язык, приучающий программиста считать пробелы и табы, а не думать над кодом.
Его обычно изучают люди, для которых программирование это что-то вторичное или третичное. Поэтому его популярность идёт от академической среды. По сути, если бы не МЛ то про него бы давно забыли бы наверное.
Здравствуйте, vsb, Вы писали:
vsb>Хаскель исключение. Думаю, его придумали инопланетяне.
Хаскел это чисто функциональный язык, его придумали математики. Ничего особо сложного в нём нет. Есть море других функциональных языков. А ещё есть Пролог, SQL и другие типичные языки для своих парадигм программирования.
А по поводу инопланетян — так я встречал мнение ведущих гуманитариев про то, что идея биткоина была послана инопланетянами, т.к. люди не могли такое придумать. Ну не в курсе чуваки про многолетнюю борьбу инженеров с правообладателями
Здравствуйте, Lazytech, Вы писали: L>К сожалению, я не знаю ни Котлина (это вроде подмножество Java для Android?), ни C#. Мое первое сообщение в этой теме основано на том, что, начав изучать JavaScript, я уже через неделю, несмотря на весьма слабое знание этого языка, довольно-таки уверенно решал на нем тренировочные задачи, тогда как в случае с Python промежуток между началом изучения языка и переходом к практикуму измерялся месяцами.
Простое лучше сложного (питон)
class Solution:
"""Given a list of strings words representing an English Dictionary,
find the longest word in words that can be built one character at a time by other words in words.
If there is more than one possible answer, return the longest word with the smallest lexicographical order."""def word_prefixes(self, word: str) -> List[str]:
"""Возвращает все префиксы слова (не включает само слово и нулевой префикс)"""for last_char_index in range(1, len(word)):
yield word[0:last_char_index]
def word_can_be_built_from_other_words(self, word: str) -> bool:
"""Проверка построения слова в соответствии с заданием"""return all([prefix in self.words_set for prefix in self.word_prefixes(word)])
def longestWord(self, words: List[str]) -> str:
"""Поиск наиболее длинного слова, которое можно построить из имеющихся слова, прибавляя по одному символу"""
self.words_set = set(words)
# просматриваем слова с максимальной длиной, в лексикографическом порядкеfor word in sorted(words, key=lambda w: (-len(w), w)):
if self.word_can_be_built_from_other_words(word):
return word
Здравствуйте, Lazytech, Вы писали:
L>К сожалению, я не знаю ни Котлина (это вроде подмножество Java для Android?), ни C#. Мое первое сообщение в этой теме основано на том, что, начав изучать JavaScript, я уже через неделю, несмотря на весьма слабое знание этого языка, довольно-таки уверенно решал на нем тренировочные задачи, тогда как в случае с Python промежуток между началом изучения языка и переходом к практикуму измерялся месяцами.
Принципы программирования остаются примерно одинаковыми на разных языках.
С питоном получилось дольше т.к. осваивал начальные принципы. При работе с JavaScript изучал уже сам язык.
Здравствуйте, Буравчик, Вы писали:
Б>Принципы программирования остаются примерно одинаковыми на разных языках. Б>С питоном получилось дольше т.к. осваивал начальные принципы. При работе с JavaScript изучал уже сам язык.
Вроде логично, только вот до того, как приступить к изучению питона, я уже худо-бедно знал VBA и даже немного Forth.
Здравствуйте, Lazytech, Вы писали:
L>На этот случай в JavaScript есть Number(), parseInt(), parseFloat(), toString() и т. д. Я уже привык к тому, что свойства объекта — строки (даже если с виду это числа), тогда как индексы массива — просто числа.
Я как-то однажды попробовал отсортировать JS небольшой смассив чисел. Вбил команду в консоли браузера. И получил массив чисел, отсортированный, как массив строк в лексикографическим порядке. А чтобы сказать, что это числа, выяснилось, что сортировщику нужно было еще компаратор оформить.
Нигде ни разу не видел, чтобы язык так вольно с данными обращался. Прибавили число к строке и получили строку. Вспомнили первый класс, проверили вычитанием, получили число. Отняли строку от строки ('2' — '3'), и получили число -1. С таким подходом я лучше вся жизнь на Фортране 4 и Коболе работать буду.
В JS я полный теоретик. Никогда ничего сложнее hello, world на нем не делал, да и это — для себя только. Но такое поведение языка меня немного удивило.
Кстати, на той картинке представлен прочтейший случай. В реальности все еще немного веселее.
Здравствуйте, Privalov, Вы писали:
P>Я как-то однажды попробовал отсортировать JS небольшой смассив чисел. Вбил команду в консоли браузера. И получил массив чисел, отсортированный, как массив строк в лексикографическим порядке. А чтобы сказать, что это числа, выяснилось, что сортировщику нужно было еще компаратор оформить.
А еще JavaScript не умеет сравнивать массивы (array) так, как Python сравнивает списки (list). Приходится всё вручную делать, через итерацию.
P>Нигде ни разу не видел, чтобы язык так вольно с данными обращался. Прибавили число к строке и получили строку. Вспомнили первый класс, проверили вычитанием, получили число. Отняли строку от строки ('2' — '3'), и получили число -1. С таким подходом я лучше вся жизнь на Фортране 4 и Коболе работать буду. P>В JS я полный теоретик. Никогда ничего сложнее hello, world на нем не делал, да и это — для себя только. Но такое поведение языка меня немного удивило. P>Кстати, на той картинке представлен прочтейший случай. В реальности все еще немного веселее.
Дэти, слова «тарелька» и «вилька» пишутся бэз мягкого знака, а «сол» и «фасол» — с мягким знаком. Запомнитэ эта, дэти, патаму шта панят эта нэвазможна!
P.S. На всякий случай уточняю, что мой выбор ЯП обусловлен в первую очередь отсутствием фундаментального айтишного образования. Поначалу выбрал Python, а потом несколько человек в этой теме
Здравствуйте, Lazytech, Вы писали:
L>Здравствуйте, Serginio1, Вы писали:
S>> А мне кажется, что знание Котлина или C# позволяет значительно быстрее освоить TypeScript. Учитывая аннотацию типов и сближение конструкций C#, учитывая общего для них создателя Хейлсберга
L>К сожалению, я не знаю ни Котлина (это вроде подмножество Java для Android?), ни C#. Мое первое сообщение в этой теме основано на том, что, начав изучать JavaScript, я уже через неделю, несмотря на весьма слабое знание этого языка, довольно-таки уверенно решал на нем тренировочные задачи, тогда как в случае с Python промежуток между началом изучения языка и переходом к практикуму измерялся месяцами.
Тогда лучше изучать TypeScript. Это поможет изучать и другие языки как статически типизированные так и динамические.
Ну и сейчас многие JavaScript-фреймворк в качестве базового языка выбирают TypeScript
и солнце б утром не вставало, когда бы не было меня
Здравствуйте, Lazytech, Вы писали:
L>А еще JavaScript не умеет сравнивать массивы (array) так, как Python сравнивает списки (list). Приходится всё вручную делать, через итерацию.
Я не вспомню, JS сортировал массив чисел или список. Дело тут в другом. Я ожидал, что JS воспримет числа как таковые, а он мне показал результат, какой получается после работы со строками. В Питоне я такого никогда не видел. По крайней мере, при попытке прибавить к строке число, Питон свалится. И если в него ввести массив (или список) чисел, то это будут числа. Без всяких сюрпризов.
Здравствуйте, Lazytech, Вы писали:
L>Разве? Я о том, что в JavaScript, как и в Python, бывают такие заковыристые конструкции: L>Как мне кажется, это даже покруче смешения чисел со строками.
Во-первых, конструкция
myVar || 0
это идиома, используемая в некоторых языках. В принципе, достаточно понятная. В некоторых языках для этого вводят вводят новый оператор, типа "??".
В питон тоже тоже думают ввести операторы для null.
Во-вторых, только в javascript при получении отсутствующего элемента из массива возврщается null (undefined). На мой взгляд, это один из самых серьезных косяков js.
Это сильно отличается от питона и других языков, в них, как и в питоне, будет брошено исключение.
Здравствуйте, Lazytech, Вы писали:
L>P.S. На всякий случай уточняю, что мой выбор ЯП обусловлен в первую очередь отсутствием фундаментального айтишного образования. Поначалу выбрал Python, а потом несколько человек в этой теме
Здравствуйте, Lazytech, Вы писали:
L>По идее, массив (array) в JavaScript — это аналог списка (list) в Python. Напомню, в Python еще есть настоящий массив (array).
Ты не понял. Я не только о массиве или списке. Я еще и о содержимом.
Еще раз. Питон обрабатывает числа или строки как таковые. А JS — как захочет. Я боюсь даже думать, что там с более сложными структурами происходит.
У меня сложилось впечатление, что JS выполняет операции так, чтобы не упасть во время работы. Отсюда странности.
Могли бы просто on error resume next ему приделать, как в VB6. Тогда бы вообще не падало. А так все же ошибки иногда выбрасывает.