Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Messages - Квас

Pages: [1] 2 3 ... 20
1
В общем и целом, реакт отслеживает, что изменяется на странице, и перерисовывает только изменения. Например, страница может состоять из хедера, футера и тела. И предположим, что при нажатии на кнопку тело меняется: например, это будет другой компонент. Тогда реакт, со своей стороны, перерисует тело, а хедер и футер оставит. С точки зрения пользователя это похоже на то, что открылась новая страница, но без мелькания, и хедер и футер не меняются.

Более того, из JS можно управлять историей браузера. На нижнем уровне это называется History API. Также существуют обёртки для библиотек/фреймворков: например, React Router для голого реакта, а в next.js встроен свой роутер. Они позволяют эмулировать многостраничный сайт с точностью до адресной строки. Например, когда пользователь кликает на ссылку, роутер, с одной стороны, заменит компонент тела страницы, а с другой стороны - заменит адрес в адресной строке. Так с точки зрения пользователя сайт получается многостраничный (только быстрее и без мелькания). При этом страница в действительности не перегружается, то есть сайт остаётся SPA.
  • 1
  • 0

2
Или можно создать несколько html страниц и они будут рендериться одновременно? :what?

Я бы сказал, что реакт не предполагает мышления в терминах html-страниц. Его основной элемент - компонент. Конечно, некоторые компоненты могут соответствовать целым страницам и могут связываться с маршрутами. Но это частный случай.
  • 2
  • 0

3
Решение называется "декомпозиция", один из основных принципов программирования. :) Даже одну огромную страницу можно собрать по частям, так что каждая часть будет небольшой. С другой стороны, SPA и не предполагает, что сайт выглядит, как одна страница. Обычно он выглядит как нормальный сайт с разными страницами и переходами по ссылкам. Только на переходах страница не "мелькает", как на SMF форуме.
  • 2
  • 0

4
Сочувствую, тоже бывали аналогичные ситуации. И умом я понимаю, что эти люди не могут быть настоящими путинистами, потому что они очень далеко от всего этого; что они просто живут в своей картине мира, где НАТО - корень зла, а далёкий сказочный СССР, может, и не распался, а построил коммунизм... Но бесит всё равно. И отдельно бесит своей нелепостью вопрос "вераюфром".
  • 1
  • 0

6
это кто такое сказал? где об этом почитать подробнее :lol:

Гугл подсказывает, что Человек-Паук.
  • 2
  • 0

7
Вот пример на TS (с одним хаком, где TS не справляется). Если игнорировать типы, он превращается в пример на JS. :) Зато с типами работает автокомплит, и компилятор подскажет, если в конфиге чего-то не хватает.

Для простоты я сделал транслитерацию одного слова. Можно читать сразу пример - там конфигурация транслита и пример использования. А "фреймворк" обеспечивает магию, превращающую конфиг в рабочую функцию.

Code: [Select]
// "Фреймворк"

interface CharAnalyzerContext {
  word: string;
  position: number;
  wordLength: number;
}

type CharAnalyzer<T> = (char: string, context: CharAnalyzerContext) => T;

type Analyzer<T> = {
  [K in keyof T]: CharAnalyzer<T[K]>;
};

// Хак с кастами типа, зато одна реализация работает для любого T
function applyAnalyzer<T>(analyzer: Analyzer<T>): CharAnalyzer<T> {
  return (char, context) => {
    const metadata: any = {};
    Object.entries(analyzer).forEach(([key, analyzerFn]) => {
      metadata[key] = (analyzerFn as CharAnalyzer<any>)(char, context)
    });
    return metadata as T;
  }
}

interface TranslitConfig<T> {
  analyzer: Analyzer<T>;
  substitutions: Record<string, string | ((metadata: T, char: string) => string)>;
  defaultSubstitution: (metadata: T, char: string) => string;
}

function createTranslit<T>(config: TranslitConfig<T>): (word: string) => string {
  const analyze = applyAnalyzer(config.analyzer);
  return word => {
    const substituted: string[] = [];
    const wordLength = word.length;
    for (let position = 0; position < wordLength; ++position) {
      const char = word[position];
      const substitution = config.substitutions[char] ?? config.defaultSubstitution;
      let substitutedString: string;
      if (typeof substitution === 'string') {
        substitutedString = substitution;
      } else {
        const context: CharAnalyzerContext = { word, position, wordLength };
        const metadata = analyze(char, context);
        substitutedString = substitution(metadata, char);
      }
      substituted.push(substitutedString);
    }
    return substituted.join('');
  }
}

// Пример

interface Metadata {
  isFirst: boolean;
  precededBy: string | null;
}

const translitConfig: TranslitConfig<Metadata> = {
  analyzer: {
    isFirst: (char, context) => context.position === 0,
    precededBy: (char, context) => context.position === 0 ? null : context.word[context.position - 1],
  },
  substitutions: {
    'с': 's',
    'л': 'l',
    'ъ': '',
    'е': ({ isFirst, precededBy }) => isFirst || precededBy === 'ъ' ? 'je' : 'e',
  },
  defaultSubstitution: (_, char) => char,
}

const translit = createTranslit(translitConfig);

console.log(['сел', 'съел', 'ел'].map(translit));
// ["sel", "sjel", "jel"]
  • 1
  • 0

8
Очень общая постановка задачи. Алгоритмы могут быть довольно заковыристыми - например, бета-код для древнегреческого.

В качестве противоположного к регуляркам полюса можно предложить побить слово на буквы и для каждой буквы собрать "метаданные", имеющие смысл для конкретной схемы транслитирации ("позиция в слове", "сочетание символов"), и применять замену не побуквенно, а к букве + метаданные. Скорее всего получится несколько громоздко и, вероятно, не очень эффективно, зато решение концептуально простое, гибкое и конфигурируемое. (Оверинжиниринг - моё второе имя.) Могу игрушечный пример набросать.
  • 1
  • 0

9
Было бы прикольно: freimuorci studium, например. ;D

Есть книжка про средневековый латинский, Даг Норберг написал. (Кстати, есть на португальском: https://latim.paginas.ufsc.br/files/2012/06/Manual-Pr%C3%A1tico-de-Latim-Medieval-2007.-Dag-Norberg.pdf) Он там приводит такой прелестный варваризм как daywerca. К сожалению, не нашёл текст, в котором он встречается.
  • 1
  • 0

10
вы говорите о единичных случаях, они писали фор-фан, а не потому что латынь продолжала быть языком науки. А вот Ньютон писал на латыни, когда писать на латыни всё ещё было нормально, это была опция по умолчанию. Но он уже застал то время, когда вернакуляры спихивали латынь на свалку истории, его работа Оптика уже была издана на английском

Я не специалист по всем наукам. Но в математике латынь сосуществовала с национальными языками на протяжении всего восемнадцатого века. На латинском писали такие столпы как Иоганн Бернулли и Эйлер - кого из современников вы поставите рядом с ними? Гаусс был последним представителем этой традиции. После Гаусса на латинском писали только диссертации. И ещё Пеано свою работу по основаниям арифметики. Вот он был "островом" и писал на латинском фор фан (точнее говоря, считал свою работу нетленкой). (А потом ещё и латино сине флексионе выдумал, большой оригинал.)
  • 1
  • 0

11
Ньютона переплюнуть, конечно, трудно. Но Эйлер и Гаусс тоже писали по-латински, а Гаусс - король математиков.
  • 1
  • 0

12
Итальянский / Re: i quali
« on: 01 April 2024, 13:29:38 »
вот авторитетный ответ от Zanichelli:
 https://aulalingue.scuola.zanichelli.it/benvenuti/2011/04/28/pronomi-relativi/


как я и говорил, che в итальянском используется только в прямом падеже, если нужен предлог, то надо использовать либо il quale либо cui

Я понял! Речь в любом случае об относительных предложениях (напрасно я вчера напирал на их относительность), но у вас в голове перепутались антецеденты и относительные местоимения. А я говорил правильно.

Che/cui и il quale - относительные местоимения, а не антецеденты. Ограничения на синтаксические функции касаются их роли в придаточном предложении, членом которого они являются.

Антецедентами являются существительные или указательные местоимения. Я также уверен, что il quale антецедентом быть не может. Это противно моей интуиции и пока не подтверждается гуглом.

Для примера, забьём в гугл "credo a ciò che" и проанализируем первый из четырёх тысяч примеров: credo a ciò che vedo "я верю в то, что вижу". Здесь антецедентом является указательное местоимение ciò с предлогом, в главном предложении оно является косвенным дополнением. Относительное местоимение che является прямым дополнением глагола vedo.

Для закрепления забьём в гугл "penso a ciò che". Первые две ссылки на сайты перевода пропустим, возьмём третью Penso a ciò che mi disse Hobie "Я думаю о том, что мне сказала Гоби" - как раз с глаголом "сказать". Опять же в главном предложении видим антецедент - косвенное дополнение, выраженное указательным местоимением с предлогом, а в зависимом - относительное местоимение che в роли прямого дополнения к disse.

Насчёт употребления che, cui / il quale см. https://www.treccani.it/enciclopedia/che-o-il-quale_(La-grammatica-italiana)/. Кстати, употребление практически идентично португальскому, вплоть до стилистики (бОльшая формальность il quale/o qual) и неупотребления il quale/o qual в ограничительных предложениях. Самое существенное различие - наличие в итальянском формы cui, которая употребляется с предлогами; в португальском с (короткими) предлогами употребляется que: a que, de que, но sobre o qual.
  • 1
  • 0

13
"Те государства, которые..." - в смысле, "все государства на свете"?  :lol:
  • 1
  • 0

14
Рашку конечно не жалко, но вот эсперанту жалко. Язык будет ассоциироваться с фашистами, тем более что риторика "фина веко" и правда очень близка к совковой идеологии "мировой революции". Это будет настоящий конец эсперанты.

Ага, я про это. Как-то двусмысленно написал.
  • 1
  • 0

15
За что эсперанто в военную-послевоенную РФ? Чтобы навсегда замазать?
  • 2
  • 0

Pages: [1] 2 3 ... 20