Почему регулярные выражения так спорны? [закрытый]

Для эффекта градиента вы можете использовать свойство series overlay .

import { Component } from '@angular/core';

@Component({
  selector: 'my-app',
  template: `
    
      
      
          
          
      
      
        
        
        
        
        
        
        
        
      
    
  `
})
export class AppComponent {}

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

import { Component } from '@angular/core';
import { Surface, Path, Text, Group, Layout, LinearGradient, GradientOptions, ShapeOptions } from '@progress/kendo-drawing';
import { Arc as DrawingArc, GradientStop } from '@progress/kendo-drawing';
import { Arc, Rect, ArcOptions } from '@progress/kendo-drawing/geometry';
function createColumn(rect, color) {
            const origin = rect.origin;
            const bottomRight = rect.bottomRight();
            const gradient = new LinearGradient({
                stops: [new GradientStop(0, "#98FB98", 1),
                        new GradientStop(0.5, color, 1)]
            });

              const path = Path.fromRect(rect, {
                    fill: gradient,
                    stroke: {
                        color: color,
                        width: 1
                    }
                });

            const group = new Group();
            group.append(path);
            return group;
        }

@Component({
  selector: 'my-app',
  template: `
    
      
      
          
          
      
      
        
        
      
    
  `
})
export class AppComponent {
public chartConfig = {
      seriesDefaults: {
          type: 'column',
          visual: function (e) {
              return createColumn(e.rect, e.options.color);
          }
      }
  };

}

208
задан 9 revs, 5 users 35% 9 July 2015 в 15:25
поделиться

19 ответов

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

133
ответ дан 23 November 2019 в 04:39
поделиться

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

0
ответ дан 23 November 2019 в 04:39
поделиться

Регулярные выражения я считаю бесценными время от времени. Когда мне нужно сделать несколько «нечетких» поисков и, возможно, заменить. Когда данные могут отличаться и иметь определенную случайность. Однако, когда мне нужно выполнить простой поиск и замену или проверить строку, я не использую регулярные выражения. Хотя я знаю многих людей, которые делают это, они используют это для всего. Это противоречие.

Если вы хотите положить гвоздь в стену, не используйте молоток. Да, это сработает, но к тому времени, когда вы получите молот, я мог бы положить 20 гвоздей в стену.

Регулярные выражения должны использоваться для того, для чего они были предназначены, и не меньше.

1
ответ дан 23 November 2019 в 04:39
поделиться

Регулярные выражения являются серьезной загадкой для многих людей, включая меня. Это прекрасно работает, но это похоже на математическое уравнение. Я рад сообщить, что кто-то наконец-то создал консолидированное расположение различных функций регулярных выражений на http://regexlib.com/ . Теперь, если Microsoft создаст только класс регулярных выражений, который автоматически сделает большую часть общих вещей, таких как удаление писем или фильтрация дат.

2
ответ дан 23 November 2019 в 04:39
поделиться

Я не думаю, что слово «спорный» является правильным.

Но я видел множество примеров, когда люди говорят: «Какое регулярное выражение мне нужно сделать, и - такие манипуляции со строками? которые являются проблемами XY.

Другими словами, они начали с предположения, что регулярное выражение - это то, что им нужно, но им лучше воспользоваться split (), переводом, подобным tr /// в perl, где символы заменяются одним на другое или просто индекс ().

4
ответ дан 23 November 2019 в 04:39
поделиться

Лучшее действительное и нормальное использование регулярных выражений - это проверка формата адреса электронной почты.

Это хорошее применение

Я использовал бесчисленное количество раз регулярные выражения в качестве одноразовых в TextPad для того, чтобы массировать плоские файлы, создавать CSV-файлы, создавать операторы вставки SQL и тому подобное.

Хорошо написанные регулярные выражения не должны быть слишком медленными. Обычно альтернативы, такие как тонны обращений к Replace, гораздо медленнее. Можно также сделать это за один проход.

Во многих ситуациях требуются именно регулярные выражения и ничего больше.

Замена специальных непечатаемых символов безобидными символами - еще одно хорошее применение.

Конечно, я могу себе представить, что некоторые кодовые базы, которые злоупотребляют регулярными выражениями в ущерб поддерживаемости. Я никогда не видел это сам.

-4
ответ дан 23 November 2019 в 04:39
поделиться

Вы почти с таким же успехом можете спросить о том, почему goto являются противоречивыми.

В основном, когда вы получаете так много " очевидная «сила», люди склонны злоупотреблять ими в ситуациях, для которых они не лучший вариант. Например, меня удивляет количество людей, которые просят разобрать CSV, XML или HTML в регулярных выражениях. Это неподходящий инструмент для работы. Но некоторые пользователи все равно настаивают на использовании регулярных выражений.

Лично я стараюсь найти эту счастливую среду - используйте регулярные выражения для того, для чего они хороши, и избегайте их, когда они не оптимальны.

Обратите внимание, что регулярные выражения могут все еще используется для анализа CSV, XML, HTML и т. д. Но обычно не в одном регулярном выражении.

5
ответ дан 23 November 2019 в 04:39
поделиться

Регулярные выражения для строк - это то же, что арифметические операторы для чисел, и я не считаю их спорными. Я думаю, что даже довольно активному активисту OO , подобному мне (который склонен выбирать другие объекты вместо строк), было бы трудно отказаться от них.

11
ответ дан 23 November 2019 в 04:39
поделиться

« Регулярные выражения: теперь у вас две проблемы » - отличная статья Джеффа Этвуда о причина. В основном, регулярные выражения являются «сложными»! Они могут создавать новые проблемы. Однако они эффективны.

16
ответ дан 23 November 2019 в 04:39
поделиться

Я не Не думаю, что они настолько противоречивы.

Я также думаю, что вы вроде как ответили на свой вопрос, потому что вы указываете, как глупо было бы использовать их повсюду ( Не все - это обычный язык 2 ) или вообще не использовать их. Вы, программист, должны принять разумное решение о том, когда регулярные выражения помогут коду или повредят его. Столкнувшись с таким решением, следует помнить о двух важных вещах: удобство обслуживания (что подразумевает читабельность) и расширяемость.

Для тех, кто особенно не любит их, я предполагаю, что они никогда не учились правильно их использовать. Я думаю, что большинство людей, которые проводят всего несколько часов с приличным учебным пособием, поймут их и очень быстро овладеют. Вот мое предложение о том, с чего начать:

http://docs.python.org/howto/regex

Хотя на этой странице говорится о регулярных выражениях в контексте Python, я обнаружил, что эта информация очень применима в другом месте. Есть несколько вещей, которые специфичны для Python, но я считаю, что они четко отмечены и легко запоминаются.

Для тех, кто особенно им против, я предполагаю, что они никогда не учились правильно их использовать. Я думаю, что большинство людей, которые проводят всего несколько часов с приличным учебным пособием, поймут их и очень быстро овладеют. Вот мое предложение о том, с чего начать:

http://docs.python.org/howto/regex

Хотя на этой странице говорится о регулярных выражениях в контексте Python, я обнаружил, что эта информация очень применима в другом месте. Есть несколько вещей, которые специфичны для Python, но я считаю, что они четко отмечены и легко запоминаются.

Для тех, кто особенно им против, я предполагаю, что они никогда не учились правильно их использовать. Я думаю, что большинство людей, которые проводят всего несколько часов с приличным учебным пособием, поймут их и очень быстро овладеют. Вот мое предложение о том, с чего начать:

http://docs.python.org/howto/regex

Хотя на этой странице говорится о регулярных выражениях в контексте Python, я обнаружил, что эта информация очень применима в другом месте. Есть несколько вещей, которые специфичны для Python, но я считаю, что они четко отмечены и легко запоминаются.

Мое предложение о том, с чего начать:

http://docs.python.org/howto/regex

Хотя на этой странице говорится о регулярных выражениях в контексте Python, я обнаружил, что эта информация очень применима в другом месте. Есть несколько вещей, которые специфичны для Python, но я считаю, что они четко отмечены и легко запоминаются.

Мое предложение о том, с чего начать:

http://docs.python.org/howto/regex

Хотя на этой странице говорится о регулярных выражениях в контексте Python, я обнаружил, что эта информация очень применима в другом месте. Есть несколько вещей, которые специфичны для Python, но я считаю, что они четко отмечены и легко запоминаются.

16
ответ дан 23 November 2019 в 04:39
поделиться

Потому что им не хватает самого популярного учебного инструмента в общепринятых IDE: Regex Wizard не существует. Даже автозаполнение. Вы должны все это кодировать сами.

29
ответ дан 23 November 2019 в 04:39
поделиться

Люди склонны считать регулярные выражения сложными; но это потому, что они используют их неправильно. Написание сложных однострочников без каких-либо комментариев, отступов или именованных снимков. (Вы не помещаете свое сложное выражение SQL в одну строку, без комментариев, отступов или псевдонимов, не так ли?). Так что да, для многих людей это не имеет смысла.

Однако, если ваша работа имеет какое-либо отношение к анализу текста (примерно любое веб-приложение там ...) и Вы не знаете регулярных выражений, вы сосете на своей работе и тратите свое время и время своего работодателя. Есть отличных ресурсов , чтобы рассказать вам все о них, что вам когда-либо понадобится, и многое другое.

37
ответ дан 23 November 2019 в 04:39
поделиться

Регулярные выражения позволяют вам компактно написать пользовательский конечный автомат (FSM) для обработки строки ввода. Существует по крайней мере две причины, по которым использование регулярных выражений затруднительно:

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

    Современные разработчики программного обеспечения предпочитают разрабатывать код и использовать отладчик для выполнения шагов. через выполнение, чтобы увидеть, если код правильный. Регулярные выражения не очень хорошо поддерживают этот стиль работы. Один «прогон» регулярного выражения фактически является атомарной операцией. Трудно наблюдать пошаговое выполнение в отладчике.

  • Слишком легко написать регулярное выражение, которое случайно принимает больше входных данных, чем вы предполагали. Значение регулярного выражения на самом деле не соответствует допустимому вводу, оно не соответствует неверному вводу . Методы выполнения «отрицательных тестов» для регулярных выражений не очень продвинуты или, по крайней мере, широко не используются.

    Это приводит к тому, что регулярные выражения трудно читать. Просто глядя на регулярное выражение, требуется большая концентрация, чтобы визуализировать все возможные входные данные, которые должны быть отклонены, но ошибочно приняты. Когда-нибудь пытались отладить чей-то код другого регулярного выражения ?

Если сегодня у разработчиков программного обеспечения есть сопротивление использованию регулярных выражений, я думаю, что это главным образом из-за этих двух факторов.

Слишком легко написать регулярное выражение, которое случайно принимает больше входных данных, чем вы предполагали. Значение регулярного выражения на самом деле не соответствует допустимому вводу, оно не соответствует неверному вводу . Методы выполнения «отрицательных тестов» для регулярных выражений не очень продвинуты или, по крайней мере, широко не используются.

Это приводит к тому, что регулярные выражения трудно читать. Просто глядя на регулярное выражение, требуется большая концентрация, чтобы визуализировать все возможные входные данные, которые должны быть отклонены, но ошибочно приняты. Когда-нибудь пытались отладить чей-то код другого регулярного выражения ?

Если сегодня у разработчиков программного обеспечения есть сопротивление использованию регулярных выражений, я думаю, что это главным образом из-за этих двух факторов.

Слишком легко написать регулярное выражение, которое случайно принимает больше входных данных, чем вы предполагали. Значение регулярного выражения на самом деле не соответствует допустимому вводу, оно не соответствует неверному вводу . Методы выполнения «отрицательных тестов» для регулярных выражений не очень продвинуты или, по крайней мере, широко не используются.

Это приводит к тому, что регулярные выражения трудно читать. Просто глядя на регулярное выражение, требуется большая концентрация, чтобы визуализировать все возможные входные данные, которые должны быть отклонены, но ошибочно приняты. Когда-нибудь пытались отладить чей-то код другого регулярного выражения ?

Если сегодня у разработчиков программного обеспечения есть сопротивление использованию регулярных выражений, я думаю, что это главным образом из-за этих двух факторов.

Это не соответствует действительному вводу, но не соответствует неверному вводу . Методы выполнения «отрицательных тестов» для регулярных выражений не очень продвинуты или, по крайней мере, широко не используются.

Это приводит к тому, что регулярные выражения трудно читать. Просто глядя на регулярное выражение, требуется большая концентрация, чтобы визуализировать все возможные входные данные, которые должны быть отклонены, но ошибочно приняты. Когда-нибудь пытались отладить чей-то код другого регулярного выражения ?

Если сегодня у разработчиков программного обеспечения есть сопротивление использованию регулярных выражений, я думаю, что это главным образом из-за этих двух факторов.

Это не соответствует действительному вводу, но не соответствует неверному вводу . Методы выполнения «отрицательных тестов» для регулярных выражений не очень продвинуты или, по крайней мере, широко не используются.

Это приводит к тому, что регулярные выражения трудно читать. Просто глядя на регулярное выражение, требуется большая концентрация, чтобы визуализировать все возможные входные данные, которые должны быть отклонены, но ошибочно приняты. Когда-нибудь пытались отладить чей-то код другого регулярного выражения ?

Если сегодня у разработчиков программного обеспечения есть сопротивление использованию регулярных выражений, я думаю, что это главным образом из-за этих двух факторов.

или, по крайней мере, не широко используется.

Это приводит к тому, что регулярные выражения трудно читать. Просто глядя на регулярное выражение, требуется большая концентрация, чтобы визуализировать все возможные входные данные, которые должны быть отклонены, но ошибочно приняты. Когда-нибудь пытались отладить чей-то код другого регулярного выражения ?

Если сегодня у разработчиков программного обеспечения есть сопротивление использованию регулярных выражений, я думаю, что это главным образом из-за этих двух факторов.

или, по крайней мере, не широко используется.

Это приводит к тому, что регулярные выражения трудно читать. Просто глядя на регулярное выражение, требуется большая концентрация, чтобы визуализировать все возможные входные данные, которые должны быть отклонены, но ошибочно приняты. Когда-нибудь пытались отладить чей-то код другого регулярного выражения ?

Если сегодня у разработчиков программного обеспечения есть сопротивление использованию регулярных выражений, я думаю, что это главным образом из-за этих двух факторов.

44
ответ дан 23 November 2019 в 04:39
поделиться

Almost everyone I know who uses regular expressions regularly (pun intended) comes from a Unix-ish background where they use tools that treat REs as first-class programming constructs, such as grep, sed, awk, and Perl. Since there's almost no syntactic overhead to use a regular expression, their productivity goes way up when they do.

In contrast, programmers who use languages in which REs are an external library tend not to consider what regular expressions can bring to the table. The programmer "time-cost" is so high that either a) REs never appeared as part of their training, or b) they don't "think" in terms of REs and prefer to fall back on more familiar patterns.

52
ответ дан 23 November 2019 в 04:39
поделиться

Регулярные выражения - отличный инструмент, но люди думают: «Эй, какой замечательный инструмент, я буду использовать его, чтобы сделать X !» где X - это то, для чего лучше использовать другой инструмент (обычно это парсер). Это стандартное использование молотка, когда вам нужна проблема с отверткой.

68
ответ дан 23 November 2019 в 04:39
поделиться

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

Хороший программист должен знать, где их использовать, а где нет. Типичным примером является синтаксический анализ нерегулярных языков (см. Решение о том, является ли язык регулярным ).

Я думаю, что вы не ошибетесь, если сначала ограничитесь реальным . ] регулярные выражения (без расширений).

7
ответ дан 23 November 2019 в 04:39
поделиться

Я думаю, что в некоторых случаях вы ДОЛЖНЫ их использовать. Например, чтобы построить лексер.

На мой взгляд, это точка зрения людей, которые могут писать регулярные выражения, и людей, которые этого не делают (или с трудом). Лично я считаю, что это хорошая мысль, например, для проверки ввода форма, будь то в javascript для предупреждения пользователя или на серверном языке.

0
ответ дан 23 November 2019 в 04:39
поделиться

Я думаю, что это менее известный метод среди программистов. Так что широкого признания он не получил. А если у вас есть нетехнический менеджер, который проверяет ваш код или вашу работу, то регулярное выражение очень плохо. Вы потратите часы на написание идеального регулярного выражения и получите несколько оценок за модуль, думая, что он написал так мало строк кода. Кроме того, как сказано в другом месте, чтение регулярных выражений - очень сложная задача.

0
ответ дан 23 November 2019 в 04:39
поделиться

Это интересная тема.
Многие поклонники regexp, похоже, путают краткость формулы с эффективностью.
Кроме того, регулярное выражение, которое требует много размышлений, приносит его автору огромное удовлетворение, которое сразу же делает его легитимным.

Но... регулярные выражения так удобны, когда производительность не имеет значения и вам нужно быстро обрабатывать текстовый вывод, например, в Perl. Кроме того, хотя производительность является проблемой, лучше не пытаться превзойти библиотеку регулярных выражений, используя самодельный алгоритм, который может содержать ошибки или менее эффективен.

Кроме того, существует ряд причин, по которым регулярные выражения несправедливо критикуются, например

  • регулярное выражение неэффективно, потому что построение верхнего не очевидно
  • некоторые программисты «забывают» компилировать регулярное выражение только один раз для многократного использования (например, статический шаблон в Java)
  • некоторые программисты выбирают стратегию проб и ошибок – с регулярными выражениями работает еще меньше!
4
ответ дан 23 November 2019 в 04:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: