Насколько важна мобильность? - PullRequest
0 голосов
/ 15 июля 2009

Я просто писал процедуру, которая ищет новую строку, и я размышлял об использовании Environment.NewLine vs '\ n'.

Синтаксически: Environment.NewLine более понятен, чем '\ n'?

А насколько важна мобильность на самом деле ?

Ответы [ 10 ]

7 голосов
/ 15 июля 2009

Зависит от какова вероятность запуска вашей программы на другой платформе не так ли?

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

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

4 голосов
/ 15 июля 2009

Это не действительно важно, если программа написана для определенной известной целевой аудитории / платформы, и вы уверены , ее область действия не будет расширяться. Но вот в чем проблема: часто вы не можете быть уверены в этих вещах. Ты не можешь смотреть в будущее.

Часто написание переносимого кода не сложнее, чем написание непереносимой альтернативы. Поэтому всегда старайтесь писать переносимый код.

2 голосов
/ 15 июля 2009

Наличие переносимого кода - это своего рода бизнес-возможность. Скажем, вы продаете только программное обеспечение для Windows сейчас. Затем правительство вашей страны решает, что оно не хочет платить лицензионные сборы Microsoft, и переводит все правительственные учреждения на Linux. Если вы не можете быстро перенести свое программное обеспечение, вы больше не можете продавать его правительству, и это большие деньги.

2 голосов
/ 15 июля 2009

Я бы пошел с Environment.NewLine. Это потому, что в зависимости от используемого языка мы можем изменить его определение. Если мы пойдем с '\ n', у каждого компилятора / языка будет свое понимание и понимание.

Итак, было бы предпочтительнее использовать Environmental.NewLine.

1 голос
/ 15 июля 2009

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

Environment.NewLine означает комбинацию новой строки для текущей системы.

Буквенный символ / строка, такой как '\ n' или "\ r \ n", означает конкретную комбинацию новой строки независимо от текущей системы.

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

1 голос
/ 15 июля 2009

Помимо переносимости, не всегда ли можно использовать Environmental.NewLine (или любой другой эквивалент на вашей платформе), поскольку он просто более удобочитаем?

Два года спустя, когда появляется «Программист случайного обслуживания», который не понимает нюансов \ n Environmental.NewLine также более пуленепробиваем.

1 голос
/ 15 июля 2009

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

Если я правильно помню, Environment.NewLine также добавит возврат каретки, если система ожидает этого, где \ n не будет.

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

0 голосов

Если вы не работаете над каким-то крошечным проектом, переносимость, вероятно, очень важна. Даже если вы делаете программу только для Windows, вы, вероятно, захотите, чтобы она работала в будущих версиях Windows. Есть много вещей, которые ломаются в новых версиях Windows, самая распространенная вещь, которую я вижу, - это защита от копирования, которая зависит от наличия некоторых неясных недокументированных внутренних структур среды выполнения Windows. Точно так же в Unix-подобных O / S вы бы хотели, чтобы эта программа работала на новейшем ядре, поэтому вы должны избегать использования системных вызовов и прочего. Дело в том, что если ваша программа очень непереносима по отношению к O / S или архитектурам, она, вероятно, даже не будет перспективой на будущее. Хех, это напоминает мне организацию реестра / файловой системы Windows.

0 голосов
/ 15 июля 2009

В вашем вопросе есть два аспекта: насколько важна переносимость, и как мне представить перенос строки в переносимом виде.

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

Символ новой строки должен быть распознан вашим парсером. Если вы работаете в Pytho, C ++, ... парсер всегда распознает последовательность '\ n'. Если вы пишете регулярные выражения, '$' будет распознаваться как конец строки.

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

0 голосов
/ 15 июля 2009

Для этих вещей ... \ n символ новой строки является фиксированным символом в наборе ASCII, так что он переносим практически на все. Вам решать, насколько важен ваш код для переноса между платформами ... Чтобы принять это решение, выясните, какова вероятность того, что ваш код будет портирован на другую платформу. Затем подумайте, какие инвестиции будут направлены на то, чтобы сделать его портативным сейчас, а не портировать его позже, когда придет время. Выберите тот, который самый дешевый или самый удобный ...

...