Pull to refresh
-9
1
Subscribers
Send message
Тем более если копирование написано неоптимально, значит его можно переписать так, чтобы потеря производительности была еще незаметней. Про подмену 30 методов я не очень понял. Зачем вам мутабельность при каждом методе? Понимаю те 4 что я упомянул плюс clone, остальные то зачем подменять? Окей, спасибо за беседу.
То есть вы считаете, что подмена нескольких методов дороже по производительности чем копирование всего объекта? Интересный и очень оригинальный взгляд на вещи. Я вас удивлю: код где мы создаем объект и вызываем startOf будет работать примерно в два раза дольше (что по правде говоря не критично, на 100 000 вызовов это полсекунды на каком нибудь среднем компьютере). Из них 30% увеличения будет на совести копирования методов и 70% на совести иммутабельности.

Прототипом у создаваемого через moment() объекта является класс, используемый moment-ом, подмена в нем методов крайне не рекомендуется методологически. По хорошему можно унаследовать класс и делать на нем, но если проигрыш во времени копеечный (2 десятых секунды на 100 000 созданий и вызовов метода) — можно и так оставить.
Ну естественно копирование объектов будет работать медленнее, чем мутабельные объекты. Это же просто априори.

Ну мне например не проще взять luxon, поскольку к методам moment я привык, мне проще было написать несколько строк кода. Но я почитаю про luxon, спасибо.
Не благодарите

const mutableMethods = ['startOf', 'endOf', 'add', 'subtract'] 
const immutableMethods = ['clone']
   
const ignore = Symbol('ignore')
const immutableAPI = [
  ...mutableMethods.map(name => 
    [name, function (...args) {
       this[name + '_ORIGINAL_'](...args)
       return this.clone()
    }]
  ),
  
  ...immutableMethods.map(name => 
    [name, function (...args) { 
       return immuteMe(this[name + '_ORIGINAL_'](...args))
    }]
  ),
]

const immuteMe = object => {
   for (const [name, fn] of immutableAPI) {
     object[name + '_ORIGINAL_'] = object[name]
     object[name] = fn.bind(object)   
   }
   return object
}

// Вызываем вместо moment
export const immutableMoment = param => immuteMe(moment(param))  

// Тесты
let today = moment()
console.log('normal: ', today === today.startOf('day')) // true

today = immutableMoment()
console.log('immutable: ', today === today.startOf('day')) // false
Упростит, если вы прочитаете про метод clone и будете его использовать там, где необходима иммутабельность при вызове изменяющих объект методов
momentjscom.readthedocs.io/en/latest/moment/01-parsing/12-moment-clone
Почему хаха? Типа не компактная?
Просто Express не сравнить по функциональности с php-шными фреймворками, поэтому все проще

Если потратить 15 минут на чтение документации, поведение сразу становится ожидаемым и мутирует он именно там где это описано https://momentjs.com/docs/

К сожалению не могу прямо сейчас вспомнить, три месяца назад, когда начал пользоваться, периодически натыкался на какие то неудобства при работе с кодом, которые storm сглаживал, но поскольку они были как писал выше некритичны, то сейчас пытаюсь вспомнить и воспроизвести и не могу, только общее ощущение, что vscode просто хорошая среда а storm настоящая конфетка, но может кто-то увидит ваш вопрос и перечислит по пунктам.
Web Storm пока заметно удобней для написания кода. Не критично, но заметно. Его единственный минус по моему опыту (помимо платности, которую думаю любой работающий программист даже не заметит) это некоторая тормознутость, вызванная видимо тем, что там нормальный интеллисенс, а не по факту употребления идентификатора. Я перешел по своим причинам, не связанным с функциональностью.
Только вопрос — можно ли как-то использовать CSS Peaks, если работаешь с css-modules и задание классов в тэгах выгладит как
<div className={styles.SomeClass}>
Или здесь наука бессильна?
Напротив, спасибо, только недавно с Jet Brains перешел на VSCode и вся эта информация очень ценна.

Возможно сравнение идет со Швецией, толерантно-гостеприимно распахнувшей двери насильникам и террористам из мусульманских стран.

Да, имеется ввиду фреймворк именно для вэб приложений.

Преимущество питона как серверного языка перед nodejs в наличии одного единственного полноценного фреймворка с удобной ORM, в nodejs такого единообразия нет. Есть express, поверх которого если не хотим писать запросы руками, нужно использовать отдельно орм фреймворк — typeorm или не сильно удобный и по моему короткому опыту использования весьма глючный sequelize. Это признаться отталкивает.

Вы просто написали что подглядываете за соседями, я вас познакомил с еще одним соседом. Синтаксис может казаться непривычным, с первого взгляда код скалы и вправду понять непросто, но есть такое расхожее мнение — кто начинает писать на скале, на других языках писать больше не хотят. Так что это просто пример, согласитесь что
for (a <- 0 to 3; b <- 1 to 4; c <- 2 to 5)
выглядит куда компактней, чем
for (int a = 0; a < 4; a++) {
  for (int b = 1; a < 5; b++) {  
    for (int с = 2; a < 6; c++) {  


По крайней мере это выглядит любопытно
Главное ни в коем случае не смотрите на output под кодом, а то неинтересно когда вместо четырех интерпретаций остается только одна.
Лучше всего со вложенными циклами дела обстоят у scala, в одной конструкции for делаются все уровни:

for (a <- 0 to 4; b <- 1 to 5; c <- 'a' to 'c') {
  println(s"$a, $b, $c")
}


output:

0, 1, a
0, 1, b
0, 1, c
0, 2, a
0, 2, b
0, 2, c
Мы хотели избавиться от извлечения слов, но возможно вы правы, это лишнее
Возможно достаточно поменять выражение на
/[^A-Za-zА-Яа-я]+/g

Information

Rating
Does not participate
Registered
Activity