Re[2]: Python и JavaScript
От: Lazytech Ниоткуда  
Дата: 09.06.19 14:54
Оценка:
Здравствуйте, 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;    
};
Отредактировано 09.06.2019 15:04 Lazytech . Предыдущая версия . Еще …
Отредактировано 09.06.2019 15:03 Lazytech . Предыдущая версия .
Re: Python и JavaScript
От: Privalov  
Дата: 09.06.19 16:33
Оценка: :))) :)
Здравствуйте, Lazytech, Вы писали:

L>Интересно, это только мне одному кажется, что знание основ Python позволяет значительно быстрее освоить такой непохожий на него язык, как JavaScript, и писать на нем более эффективный код?


А про темную сторону JavaScript тебе еще не рассказали?

  Довольно баянистая, зато отражающая правду жизни картинка.
Re[2]: Python и JavaScript
От: Lazytech Ниоткуда  
Дата: 09.06.19 16:46
Оценка:
Здравствуйте, Privalov, Вы писали:

P>А про темную сторону JavaScript тебе еще не рассказали?


На этот случай в JavaScript есть Number(), parseInt(), parseFloat(), toString() и т. д. Я уже привык к тому, что свойства объекта — строки (даже если с виду это числа), тогда как индексы массива — просто числа.

P.S. Ах да, есть же еще булевы переменные.
Отредактировано 09.06.2019 16:49 Lazytech . Предыдущая версия .
Re: Python и JavaScript
От: vsb Казахстан  
Дата: 09.06.19 17:15
Оценка: 1 (1)
Все языки похожи друг на друга. Выучил хорошо один, остальные достаточно просто посмотреть, что там вместо фигурных скобочек и всё.

Хаскель исключение. Думаю, его придумали инопланетяне.
Re[2]: Python и JavaScript
От: Danchik Украина  
Дата: 09.06.19 18:23
Оценка:
Здравствуйте, morgot, Вы писали:

M>Здравствуйте, Lazytech.


M>Питон не нужен. Абсолютно бесполезный язык, приучающий программиста считать пробелы и табы, а не думать над кодом.


Вот другое мнение сложилось: думать над кодом, но не/редко думать как это дальше будет саппортится.
Re[3]: Python и JavaScript
От: zverjuga Беларусь  
Дата: 09.06.19 19:27
Оценка: :)
Здравствуйте, Lazytech, Вы писали:

L>На этот случай в JavaScript есть Number(), parseInt(), parseFloat(), toString() и т. д. Я уже привык к тому, что свойства объекта — строки (даже если с виду это числа), тогда как индексы массива — просто числа.


L>P.S. Ах да, есть же еще булевы переменные.



уже дерзить начинаешь?
проклятый антисутенерский закон
Re[2]: Python и JavaScript
От: Nikе Россия  
Дата: 09.06.19 19:42
Оценка:
Здравствуйте, morgot, Вы писали:

M>Питон не нужен. Абсолютно бесполезный язык, приучающий программиста считать пробелы и табы, а не думать над кодом.


Его обычно изучают люди, для которых программирование это что-то вторичное или третичное. Поэтому его популярность идёт от академической среды. По сути, если бы не МЛ то про него бы давно забыли бы наверное.
Нужно разобрать угил.
Re[2]: Python и JavaScript
От: Nikе Россия  
Дата: 09.06.19 19:46
Оценка:
Здравствуйте, vsb, Вы писали:

vsb>Хаскель исключение. Думаю, его придумали инопланетяне.


Хаскел это чисто функциональный язык, его придумали математики. Ничего особо сложного в нём нет. Есть море других функциональных языков. А ещё есть Пролог, SQL и другие типичные языки для своих парадигм программирования.
А по поводу инопланетян — так я встречал мнение ведущих гуманитариев про то, что идея биткоина была послана инопланетянами, т.к. люди не могли такое придумать. Ну не в курсе чуваки про многолетнюю борьбу инженеров с правообладателями
Нужно разобрать угил.
Re[3]: Python и JavaScript
От: Буравчик Россия  
Дата: 09.06.19 21:10
Оценка: 3 (1) +1
Здравствуйте, 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
Best regards, Буравчик
Re[3]: Python и JavaScript
От: Буравчик Россия  
Дата: 09.06.19 21:13
Оценка: 1 (1)
Здравствуйте, Lazytech, Вы писали:

L>К сожалению, я не знаю ни Котлина (это вроде подмножество Java для Android?), ни C#. Мое первое сообщение в этой теме основано на том, что, начав изучать JavaScript, я уже через неделю, несмотря на весьма слабое знание этого языка, довольно-таки уверенно решал на нем тренировочные задачи, тогда как в случае с Python промежуток между началом изучения языка и переходом к практикуму измерялся месяцами.


Принципы программирования остаются примерно одинаковыми на разных языках.
С питоном получилось дольше т.к. осваивал начальные принципы. При работе с JavaScript изучал уже сам язык.
Best regards, Буравчик
Re[4]: Python и JavaScript
От: Lazytech Ниоткуда  
Дата: 10.06.19 04:32
Оценка:
Здравствуйте, Буравчик, Вы писали:

Б>Принципы программирования остаются примерно одинаковыми на разных языках.

Б>С питоном получилось дольше т.к. осваивал начальные принципы. При работе с JavaScript изучал уже сам язык.

Вроде логично, только вот до того, как приступить к изучению питона, я уже худо-бедно знал VBA и даже немного Forth.
Re[4]: Python и JavaScript
От: Lazytech Ниоткуда  
Дата: 10.06.19 04:38
Оценка:
Здравствуйте, zverjuga, Вы писали:

Z>уже дерзить начинаешь?


Разве? Я о том, что в JavaScript, как и в Python, бывают такие заковыристые конструкции:
itemCounts[item] = (itemCounts[item] || 0) + 1;

Как мне кажется, это даже покруче смешения чисел со строками.
Re[3]: Python и JavaScript
От: Privalov  
Дата: 10.06.19 05:30
Оценка:
Здравствуйте, Lazytech, Вы писали:

L>На этот случай в JavaScript есть Number(), parseInt(), parseFloat(), toString() и т. д. Я уже привык к тому, что свойства объекта — строки (даже если с виду это числа), тогда как индексы массива — просто числа.


Я как-то однажды попробовал отсортировать JS небольшой смассив чисел. Вбил команду в консоли браузера. И получил массив чисел, отсортированный, как массив строк в лексикографическим порядке. А чтобы сказать, что это числа, выяснилось, что сортировщику нужно было еще компаратор оформить.

Нигде ни разу не видел, чтобы язык так вольно с данными обращался. Прибавили число к строке и получили строку. Вспомнили первый класс, проверили вычитанием, получили число. Отняли строку от строки ('2' — '3'), и получили число -1. С таким подходом я лучше вся жизнь на Фортране 4 и Коболе работать буду.

В JS я полный теоретик. Никогда ничего сложнее hello, world на нем не делал, да и это — для себя только. Но такое поведение языка меня немного удивило.

Кстати, на той картинке представлен прочтейший случай. В реальности все еще немного веселее.
Re[4]: Python и JavaScript
От: Lazytech Ниоткуда  
Дата: 10.06.19 06:17
Оценка:
Здравствуйте, Privalov, Вы писали:

P>Я как-то однажды попробовал отсортировать JS небольшой смассив чисел. Вбил команду в консоли браузера. И получил массив чисел, отсортированный, как массив строк в лексикографическим порядке. А чтобы сказать, что это числа, выяснилось, что сортировщику нужно было еще компаратор оформить.


А еще JavaScript не умеет сравнивать массивы (array) так, как Python сравнивает списки (list). Приходится всё вручную делать, через итерацию.

P>Нигде ни разу не видел, чтобы язык так вольно с данными обращался. Прибавили число к строке и получили строку. Вспомнили первый класс, проверили вычитанием, получили число. Отняли строку от строки ('2' — '3'), и получили число -1. С таким подходом я лучше вся жизнь на Фортране 4 и Коболе работать буду.

P>В JS я полный теоретик. Никогда ничего сложнее hello, world на нем не делал, да и это — для себя только. Но такое поведение языка меня немного удивило.
P>Кстати, на той картинке представлен прочтейший случай. В реальности все еще немного веселее.

Дэти, слова «тарелька» и «вилька» пишутся бэз мягкого знака, а «сол» и «фасол» — с мягким знаком. Запомнитэ эта, дэти, патаму шта панят эта нэвазможна!



P.S. На всякий случай уточняю, что мой выбор ЯП обусловлен в первую очередь отсутствием фундаментального айтишного образования. Поначалу выбрал Python, а потом несколько человек в этой теме
Автор: Lazytech
Дата: 04.05.19
указали на то, что с этим языком мне ничего не светит.
Отредактировано 10.06.2019 6:25 Lazytech . Предыдущая версия . Еще …
Отредактировано 10.06.2019 6:22 Lazytech . Предыдущая версия .
Отредактировано 10.06.2019 6:22 Lazytech . Предыдущая версия .
Re[3]: Python и JavaScript
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 10.06.19 06:48
Оценка: 1 (1)
Здравствуйте, Lazytech, Вы писали:

L>Здравствуйте, Serginio1, Вы писали:


S>> А мне кажется, что знание Котлина или C# позволяет значительно быстрее освоить TypeScript. Учитывая аннотацию типов и сближение конструкций C#, учитывая общего для них создателя Хейлсберга


L>К сожалению, я не знаю ни Котлина (это вроде подмножество Java для Android?), ни C#. Мое первое сообщение в этой теме основано на том, что, начав изучать JavaScript, я уже через неделю, несмотря на весьма слабое знание этого языка, довольно-таки уверенно решал на нем тренировочные задачи, тогда как в случае с Python промежуток между началом изучения языка и переходом к практикуму измерялся месяцами.


Тогда лучше изучать TypeScript. Это поможет изучать и другие языки как статически типизированные так и динамические.
Ну и сейчас многие JavaScript-фреймворк в качестве базового языка выбирают TypeScript
и солнце б утром не вставало, когда бы не было меня
Re[5]: Python и JavaScript
От: Privalov  
Дата: 10.06.19 06:51
Оценка:
Здравствуйте, Lazytech, Вы писали:

L>А еще JavaScript не умеет сравнивать массивы (array) так, как Python сравнивает списки (list). Приходится всё вручную делать, через итерацию.


Я не вспомню, JS сортировал массив чисел или список. Дело тут в другом. Я ожидал, что JS воспримет числа как таковые, а он мне показал результат, какой получается после работы со строками. В Питоне я такого никогда не видел. По крайней мере, при попытке прибавить к строке число, Питон свалится. И если в него ввести массив (или список) чисел, то это будут числа. Без всяких сюрпризов.
Re[5]: Python и JavaScript
От: Буравчик Россия  
Дата: 10.06.19 06:58
Оценка: 1 (1) +1
Здравствуйте, Lazytech, Вы писали:

L>Разве? Я о том, что в JavaScript, как и в Python, бывают такие заковыристые конструкции:

L>Как мне кажется, это даже покруче смешения чисел со строками.

Во-первых, конструкция
myVar || 0

это идиома, используемая в некоторых языках. В принципе, достаточно понятная. В некоторых языках для этого вводят вводят новый оператор, типа "??".
В питон тоже тоже думают ввести операторы для null.

Во-вторых, только в javascript при получении отсутствующего элемента из массива возврщается null (undefined). На мой взгляд, это один из самых серьезных косяков js.
Это сильно отличается от питона и других языков, в них, как и в питоне, будет брошено исключение.

Поэтому на питоне было бы скорее все так:
itemCounts[item] = itemCounts.get(item, 0) + 1

или
itemCounts.setdefault(item, 0)
itemCounts[item] += 1;

или вообще лучше использовать defaultdict. Как раз для этих целей сделан (в стандартной библиотеке).
Best regards, Буравчик
Отредактировано 10.06.2019 6:59 Буравчик . Предыдущая версия .
Re[5]: Python и JavaScript
От: Буравчик Россия  
Дата: 10.06.19 07:14
Оценка: 1 (1)
Здравствуйте, Lazytech, Вы писали:

L>P.S. На всякий случай уточняю, что мой выбор ЯП обусловлен в первую очередь отсутствием фундаментального айтишного образования. Поначалу выбрал Python, а потом несколько человек в этой теме
Автор: Lazytech
Дата: 04.05.19
указали на то, что с этим языком мне ничего не светит.


Я думаю, они ошибаются.
Питон будет одним из языков мэйнстрима, также как и js (который, скорее всего, доведут до ума).
Наравне с kotlin, java, c#
Best regards, Буравчик
Re[6]: Python и JavaScript
От: Lazytech Ниоткуда  
Дата: 10.06.19 07:14
Оценка:
Здравствуйте, Privalov, Вы писали:

P>Я не вспомню, JS сортировал массив чисел или список.


По идее, массив (array) в JavaScript — это аналог списка (list) в Python. Напомню, в Python еще есть настоящий массив (array).
Re[7]: Python и JavaScript
От: Privalov  
Дата: 10.06.19 07:43
Оценка: 1 (1)
Здравствуйте, Lazytech, Вы писали:

L>По идее, массив (array) в JavaScript — это аналог списка (list) в Python. Напомню, в Python еще есть настоящий массив (array).


Ты не понял. Я не только о массиве или списке. Я еще и о содержимом.
Еще раз. Питон обрабатывает числа или строки как таковые. А JS — как захочет. Я боюсь даже думать, что там с более сложными структурами происходит.
У меня сложилось впечатление, что JS выполняет операции так, чтобы не упасть во время работы. Отсюда странности.
Могли бы просто on error resume next ему приделать, как в VB6. Тогда бы вообще не падало. А так все же ошибки иногда выбрасывает.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.