Code — Не работает код(массивы)

Содержание

Code Blocks не воспринимает правильно Двумерные массивы?

Доброго времени суток форумчане, возникла такая проблема написал в code blocks программу которая заполняет двумер массив + , но делает он это одним столбцом,т.е 25 элементов массива идут сплошняком вниз:вот так
+
+
+
+
+
+
+
а должно вот так
+ + + + + + + + +
+++++++++++

code blocks хорош мало весит и в принципе удобен
Вопрос :
Code Blocks не воспринимает правильно Двумерные массивы?

11.11.2015, 12:41

Раздельная компиляция в Code::Blocks — как правильно разместить код в файлах?
В проекте code blocks есть функция main, несколько функций, которые подключаются как статические.

как правильно создать opengl проэкт в IDE code blocks чтобы компилировался?
создаю новый проект опенгл, но нифига не компилируется выдает кучу ошибок

Code::Blocks
Здравствуйте. Я в английском не силён, и разобраться самостоятельно с этой IDE не могу. У меня есть.

Code::blocks и VS
всем привет, у меня такой вопрос: какой в Code::blocks аналог для #include stdafx.h? Нужно.

Code::blocks
Помогите как включить #include #include в Code::block — се ,

Горячие клавиши Visual Studio Code

В таблице перечислены горячие клавиши по умолчанию, клавиши расширений , и перенастроенные мной .

Мое избранное

LivePreview

Для работы LivePreview должен быть установлен NodeJS.

1. В Visual Studio Code открываем встроенный терминал (Ctrl + ` или Ctrl + J)
2. Ввести: live-server

Страница откроется в браузере по умолчанию. Подробнее тут.

Расширения

Синхронизация настроек Visual Studio Code с Gist

1. Установить расширение: Settings Sync

2. Сгенерировать токен на GitHub по инструкции из расширения

3. В Visual Studio Code нажать Shift + Alt + U и ввести токен

4. Если был введен неверный токен, то можно сбросить настройки, и повторить ввод: F1 Sync Sync: Reset Extension Settings

5. После ввода токена будет показан Gist ID, который нужно скопировать и сохранить для настройки загрузки на других машинах

6. Скорректировать настрйки расширения в соответствии с теми, что ниже. Для вызова настроек: Ctrl + K Ctrl + S

7. Для вызова настроек Settings Sync использовать сочетание клавиш: F1 Sync

Настройки расширения на основной машине для выгрузки на Gist:

Символьный код из названия элемента

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

Скачал последнюю демо версию в ней это уже реализовано достаточно просто активировать линк. На сайте установлена более старая версия и этого линка нет.

Возможно достаточно добавить часть кода на сайт чтобы добавить это функционал. Подскажите где копать?

Вот пример для всех инфоблоков.
Этот код нужно добавить в /bitrix/php_interface/init.php

Код

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

но как быть если некторые уже прописаны руками и нежелательно их менять

Добавить проверку, заполнен ли символьный код

сделать что то типа
if (strlen($arFields[«NAME»])>0 && strlen($arFields[«CODE»])

Вместо самописного Translit::UrlTranslit можно использовать CUtil::translit. В данном случае:

Код
Цитата
Сергей Нифантов пишет:
if (strlen($arFields[«NAME»])>0 && strlen($arFields[«CODE»])

У меня не работает этот код.
У меня на сайте имеются новости статьи и так далее.

Мне нужно сделать запрос к БД выдернуть от туда имена статей, новостей проверял есть ли у них символьный код, а если нету то брал из имени файла, сделал транслит в символьный код и записал в базу.

Выше приведённый пример не работает. Как были новости с двумя слэшами так и остались.то есть ссылка вида «мой_сайт/about/news/символьный _код_не_появился/

RAPOS , возможно проблема из-за кодировки.

Идем в админку на страницу «проверка сайта», запускаем проверку. Что там?
Есть ли сообщение о неверной кодировке?

Тогда добавьте в .htaccess:
php_value mbstring.func_overload 2
php_value mbstring.internal_encoding UTF-8

Цитата
Julliet пишет:
RAPOS , возможно проблема из-за кодировки.

Идем в админку на страницу «проверка сайта», запускаем проверку. Что там?
Есть ли сообщение о неверной кодировке?

Тогда добавьте в .htaccess:
php_value mbstring.func_overload 2
php_value mbstring.internal_encoding UTF-8

Кодировка базы данных
подробнее
Сравнение для базы (utf8_general_ci) отличается от сравнения для соединения (utf8_unicode_ci). Исправить

вот выше это выдало

И эти две строчки есть у меня .htaccess:

php_value mbstring.func_overload 2
php_value mbstring.internal_encoding UTF-8

Цитата
RAPOS пишет:
Мне нужно сделать запрос к БД выдернуть от туда имена статей, новостей проверял есть ли у них символьный код, а если нету то брал из имени файла, сделал транслит в символьный код и записал в базу.

Выше приведённый пример не работает.

в админке появились символьные коды?
показывайте скрипт, которым генерите коды.
потом отскриньте настройки урлов инфблока новостей и тоже в студию.
потом, еще и настройки компонентов, которые у вас формируют новости (та, где прописываются настройки урлов)

4 предположения, проверяйте по очереди.

Символьный код не прописался после скрипта даже в админке. Скрипт выше.
Код вывода:
result_modifier.php — сам файл

Подскажите, пожалуйста, как настроить генерацию ЧПУ из заголовков новостей в 1С-Битрикс: Управление сайтом 7.0.6

Как получить ключи массива в JavaScript?

у меня есть массив, созданный с помощью этого кода:

Я хочу получить каждое из значений 46, 66, 90 в цикле. Я пытался for (var key in widthRange) но это дает мне целую кучу дополнительных свойств (я предполагаю, что они являются функциями на объекте). Я не могу использовать обычный цикл for, так как значения не являются последовательными.

11 ответов:

нужно позвонить hasOwnProperty функция для проверки того, действительно ли свойство определено на самом объекте (в отличие от его прототипа), например:

обратите внимание, что вам нужна отдельная проверка для length .
Однако, вы не должны использовать массив здесь вообще; вы должны использовать обычный объект. Все объекты Javascript функционируют как ассоциативные массивы.

строковые ключи могут быть запрошены с помощью Object.keys(array) .

Если вы делаете какие-либо манипуляции с массивом/коллекцией или проверку, я настоятельно рекомендую использовать подчеркивания.js. Это небольшой, хорошо протестированный и сэкономит вам дни/недели/годы головной боли javascript. Вот его функции ключей:

ключи

получить все имена свойств объекта.

вы не можете получить только ключи, которые вы установили, потому что это не так, как работает массив. Как только вы установите элемент 46, у вас также будет набор от 0 до 45 (хотя они равны нулю).

вы всегда могли бы два массивы:

edit ну может быть, что я здесь весь мокрый .

скажем, Ваш массив выглядел так arr = [ < a: 1, b: 2, c: 3 >, < a: 4, b: 5, c: 6 >, < a: 7, b: 8, c: 9 >] (или, возможно, другие ключи) вы могли бы сделать

Настройка редактора кода Visual Studio Code

Сниппеты в Visual Studio Code, поддержка Emmet в Visual Studio Code. Пошаговая настройка редактора

  • Автор записи

Автор: Администратор
Дата записи

Более 5 лет для своей работы я использовал редактор кода Notepad ++, это действительно простая «рабочая лошадка», которая, не смотря на свою простоту,имеет все необходимые базовые функции для написании кода и большой потенциал для расширяемости. Но, как говорится, все когда то заканчивается… Конечно же время не стоит на месте, все развивается, движется вперед, совершенствуется… Чего нельзя, к сожалению, сказать о Notepad++ �� Особенно огорчает дизайн и его привязка к ОС «Windows».

И вот ответ на мою боль — редактор исходного кода «Visual Studio Code»! Современный, бесплатный и кроссплатформенный, созданный в компании Microsoft.

Редактор кода Visual Studio Code

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

  • C++
  • C#
  • CSS
  • Dockerfile
  • HTML
  • JavaScript
  • Java
  • JSON
  • Less
  • Markdown
  • PHP
  • Python
  • Sass
  • TypeScript
  • Shell Script (Bash)
  • Rust
  • Swift
  • Visual Basic
  • XML, XSL, YAML

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

Поддержка синтаксиса Emmet

Внимание верстальщики! В «Visual Studio Code» уже включена поддержка Emmet. И вызывается ее исполнение простым нажатием клавиши TAB (табуляция). Для тех кто не в курсе приведу простой пример: что бы нам получить подобную HTML-структуру

нам достаточно ввести в документе следующего рода комбинацию и нажать клавишу табуляции, вуаля! И строчка превращается …

div>div>p>ul>li*5

Ну а каркас HTML документа по стандартам W3 HTML5 и подавно создать легко:

Освоив не хитрый синтаксис emmet вы определенно сэкономите свое время и нервы при работе с кодом HTML и CSS �� Попробуйте …

Расширения

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

  • PHP Debug (использует библиотеку XDebug и незаменим при отладке PHP-кода )
  • Bootstrap 3 Snippets (сниппеты популярного HTML-CSS-JS фреймворка)
  • Debugger for Chrome (Отладка кода JavaScript в браузере Chrome)
  • WordPress Snippet (функции WordPress)

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

Как установить расширение?

Установка происходит проще-простого. Либо из меню интерфейса редактора, где необходимо в разделе расширений ввести ключевое слово и воспользоваться поиском:

Либо (для более продвинутых) с помощью комбинации клавиш Ctrl+P и в появившуюся строку поиска необходимо забить ключевое слово, либо прямую ссылку для установки расширения, которую можно найти под каждым расширением на его странице, на сайте редактора «Visual Studio Code»:

При помощи специальных команд, в строке поиска можно осуществить фильтрацию к вашим расширениям по :

  • @popular (популярные)
  • @recommended (рекомендуемые)
  • @outdated (требуемые обновления)

А вообще автоматическое обновление Ваших расширений можно настроить достаточно просто с помощью одной строчки конфигурации. Для этого необходимо открыть настройки редактора:

Файл → Параметры → Параметры пользователя

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

Пользовательская настройка редактора

В своем предыдущем редакторе Notepad++ я определенно привык к двум вещам:

  1. При открытии новых файлов они не должны вызывать открытие новой копии редактора, а должны открываться в текущей копии, в новых вкладках. За это отвечает следующий параметр: «window.openFilesInNewWindow»: false,значение которого необходимо поменять с true на false
  2. Управление переносом строк

Все это мгновенно настраивается. Ниже приведен список настроек редактора с комментариями. Ознакомьтесь на досуге.

Повышаем продуктивность работы в Visual Studio Code: полезные сочетания клавиш

Перевод статьи «The guide to Visual Studio Code shortcuts, higher productivity and 30 of my favourite shortcuts you need to learn».

Практически любым функционалом Visual Studio Code можно воспользоваться, выбрав команду в палитре команд или просто набрав нужное сочетание клавиш.

Вероятнее всего, вы работаете по 8 часов в день и значительную часть этого времени проводите в своем любимом редакторе кода. Знание полезных сочетаний клавиш ускорит вашу работу. Вы сможете гораздо быстрее найти нужный вам файл или, не открывая дополнительное окно терминала, запустить NPM-команду, нужную вам прямо СЕЙЧАС.

Шпаргалки с сочетаниями клавиш

Создатели Visual Studio Code сделали для вас готовые шпаргалки, разбив их по операционным системам:

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

Раскладки (Keymaps)

Вы пользователь Vim? Или, может, у вас в голове уже вытатуированы сочетания клавиш для Emacs? Или, как вариант, вам по какой-то причине нравится пользоваться notepad++ и имеющимися там сочетаниями?

Для всех вас в Visual Studio есть соответствующие расширения! Давайте для примера установим Atom Keymap. Мы сделаем это без помощи вашей любимой мышки (почти).

  1. Откройте Visual Studio Code.
  2. Открыв, нажмите клавиши CTRL+SHIFT+X. Откроется список расширений, а фокус курсора будет в строке поиска. Введите @category:keymaps.
  3. Вы увидите список раскладок. Нажмите Tab, а затем стрелку «вниз».
  4. Нажимайте на стрелку, пока не выберете Atom Keymap. Теперь нажмите Enter.
  5. К сожалению, я не нашел способа выбрать кнопку инсталляции при помощи одной лишь клавиатуры. Так что здесь придется кликнуть мышкой!

Вы можете найти такую раскладку практически для каждого редактора кода. Установите ту, что вам нравится, и пользуйтесь уже выученными сочетаниями клавиш! Круто, правда?

Настройки сочетаний клавиш

Есть два способа посмотреть настройки сочетаний клавиш. Первый — при помощи графического интерфейса, второй — при помощи редактирования JSON-файла.

Графический интерфейс

Графический интерфейс можно открыть, если нажать CTRL+k, а затем, удерживая CTRL, нажать CTRL+s.

Сверху у вас будет строка поиска, где вы сможете поискать команду или нужное вам сочетание клавиш. Эти диалоговые окна в Visual Studio Code выглядят примерно одинаково и часто встречаются.

Вы увидите четыре колонки. Давайте их рассмотрим.

  1. Command (команда): действие, осуществляемое Visual Studio Code.
  2. Keybinding (сочетание клавиш): комбинация клавиш, которые нужно нажать для осуществления действия.
  3. When (когда): фильтр. Он говорит Visual Studio Code, должно ли сочетание клавиш действовать в этом контексте.
  4. Source (источник): Есть много способов, как Visual Studio может узнать о назначенных сочетаниях клавиш. Самый распространенный случай — Default, команды, которые есть в Visual Studio Code по умолчанию. User — команды, созданные пользователем. Третий способ — Extension (расширение). Автор какого-нибудь расширения может также добавлять и специальные сочетания клавиш для этого расширения. Если какое-то ваше любимое сочетание не работает, причина может быть как раз в этом.

Чтобы изменить сочетание клавиш, нужно сделать двойной клик в строке (возникнет всплывающее окно). Затем нажмите нужное вам сочетание клавиш и Enter.

Сочетания клавиш в JSON-файле

Теперь, когда у вас есть общее понимание того, как работают сочетания клавиш, давайте рассмотрим файл keybindings.json.

Прежде всего, есть два файла: дефолтный keybindings.json и user-specific keybindings.json. Нажмите CTRL+SHIFT+P или F1, чтобы открыть палитру команд. Наберите keyboard shortcuts — вы должны увидеть как минимум две позиции в вашей палитре.

  • Preferences: Open Default Keyboard Shortcuts (JSON). Это файл, в котором Visual Studio Code хранит все дефолтные сочетания клавиш и список доступных сочетаний, которые не используются (внизу). Я бы ничего здесь не менял.
  • Preferences: Open Keyboard Shortcuts (JSON). Это файл с пользовательскими сочетаниями клавиш, его вполне можно редактировать. В самом начале это просто пустой массив, не более!

Чтобы добавить сочетание клавиш в JSON-файл, нужно добавить объект, как в примере:

Вам нужно обозначить нужную клавишу и команду. When говорит Visual Studio Code, где он должен запускать эту команду. Если вы оставите это поле пустым, команда будет прослушиваться везде.

Полезные сочетания клавиш

Открыть палитру команд

Это вы, наверное, уже знаете, но могли и пропустить.

Открывает самый мощный функционал Visual Studio Code — палитру команд. Просто впечатайте в строке поиска то, что вам нужно, и палитра это найдет!

Открыть и закрыть боковую панель

Иногда вам нужно больше пространства, а боковая панель занимает место. Просто нажмите

Таким образом можно сворачивать и разворачивать боковую панель.

Войти в режим дзен (Zen Mod)

Zen Mod встроен в Visual Studio Code. Чтобы перейти в него, нажмите

Таким образом Zen Mod и включается, и выключается.

Перейти во встроенный терминал

Одна из моих любимых фич в Visual Studio Code — встроенный терминал. В 99% случаев я пользуюсь именно им! Чтобы его быстро открыть или закрыть, нужно нажать

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

Поиск файла в проекте

В Visual Studio Code есть отличный встроенный поиск. Чтобы открыть его, нажмите

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

Переключиться в недавно открытое рабочее пространство

Вы работаете над микросервисной архитектурой и вам все время приходится переключаться между папками? Для вас есть специальное сочетание клавиш! Нажмите

Откроется диалоговое окно со списком недавно открытых рабочих пространств (папок). Дополнительный совет: если в этом диалоговом окне нажать CTRL+ENTER, Visual Studio Code откроет его в новом окне.

Разделить окно редактора

Люди любят vim, потому что в нем легко разбивать окно просмотра на несколько частей. В Visual Studio Code это тоже есть. Просто нажмите

— чтобы создать два столбца, или

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

Перевести фокус в нужное окно

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

То есть, вам нужно нажать CTRL и номер окна, в которое вы хотите перевести фокус. Для первого — CTRL+1, для второго CTRL+2 и т. д. Просто, правда?

Закрыть текущее окно

Теперь, когда вы пооткрывали кучу окон, нужно научиться их закрывать. Это можно сделать очень быстро — нажав

Это сочетание закрывает текущее окно.

Закрыть только сохраненные окна

Иногда у вас столько открытых окон, что вы уже не знаете, что вы сохранили, а что — нет. Да, я знаю, что это можно понять по точке на вкладке, но все равно, для этого же нужно напрячься и найти нужные файлы. Visual Studio Code может вас подстраховать! Просто нажмите

Это сочетание закроет все сохраненные окна, так что вы сразу увидите, что у вас не сохранено.

Открыть новый файл

Вам нужен новый файл, чтобы набросать какой-то код? Или вам нужно создать новый файл для вашего проекта? Нажмите

Откроется новый редактор.

Сменить язык текущего файла

Хотите сменить язык, который выбрали для файла, например, хотите использовать Javascript (react), а не Javascript? Нажмите

Откроется новое диалоговое окно, где вы сможете поискать желаемый язык.

Перейти на строку

А теперь давайте сосредоточимся на том, как ускорить редактирование. Допустим, у вас ошибка на строке 1042 (и если у вас такой длинный файл, это само по себе плохо). Прокрутка не нужна! Нажмите

Откроется диалоговое окно, где нужно ввести номер строки, на которую вы хотите перейти. Это очень полезное сочетание, особенно в комплекте с CTRL+p (поиск файла в проекте).

Перейти к идентификатору (Symbol)

Что такое Symbol? В языках программирования это обычно переменные. В CSS это селекторы. Чтобы увидеть диалоговое окно, нажмите

Откроется диалог со списком доступных идентификаторов в текущем файле.

Если нажмете такое сочетание, в диалоге будет только #. Вам нужно будет ввести нужный идентификатор, а Visual Studio Code поищет его по всему рабочему пространству (если он поддерживается языком, который вы используете).

Переместить строку вверх или вниз

Иногда вам нужно переместить строку внутри вашего if или просто переместить, потому что она вызывается слишком рано. Сделать это можно, нажав

— чтобы переместить строку вниз, или

— чтобы переместить текущую строку вверх.

Копировать текущую строку

Вам нужно заполнить массив какими-то переменными, но вам лень писать цикл. Как же вам получить array[0] array[1] и array[2]? Можно скопировать первую строку и просто изменить, что нужно. Для этого нажмите

Так вы скопируете текущую выбранную строку и вставите скопированное на одну строку выше.

При помощи этого сочетания текущая строка будет скопирована и вставлена на строку ниже.

Показать предложения

В Visual Studio Code есть встроенные предложения. В большинстве случаев они всплывают автоматически, но если этого не происходит, а вам нужно, просто нажмите

Это сочетание откроет диалог предложений.

Закомментировать текущее выделение

Порой вам нужно изолировать код и закомментировать его. Вам поможет сочетание

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

Выделить (выбрать) несколько строк кода

Чтобы закомментировать блок кода, нужно выбрать больше одной строки. Это можно сделать, нажав

— чтобы начать выделение с текущей строки и двигать курсор вверх.

— чтобы начать выделение с текущей строки и двигать курсор вниз.

Свернуть или развернуть код

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

— чтобы свернуть (спрятать) код

— чтобы развернуть (показать) код.

Вырезать всю строку

Здесь у вас не должно быть выделенного кода. Нажмите

Если ничего не выделено, вырежется вся строка.

Увеличить (уменьшить) отступ строки

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

Нажимать нужно столько раз, сколько вам нужно для приведения кода в желаемый вид. А вы знали, что можно и убрать отступ? Сдвинуть код влево? Это можно сделать, нажимая

Заключение

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

Вероятно, у вас есть и свои любимые сочетания? Поделитесь в комментариях, возможно, они еще кому-нибудь пригодятся!

Отладка только пользовательского кода с помощью Только мой код Debug only user code with Just My Code

Только мой код — это функция отладки Visual Studio, которая автоматически перебирает вызовы к системе, платформе и другим непользовательским кодом. Just My Code is a Visual Studio debugging feature that automatically steps over calls to system, framework, and other non-user code. В окне Стек вызовов только мой код сворачивает эти вызовы в фреймы [внешний код] . In the Call Stack window, Just My Code collapses these calls into [External Code] frames.

Только мой код работает иначе в проектах .NET, C++и JavaScript. Just My Code works differently in .NET, C++, and JavaScript projects.

Включение или отключение режима «Только мой код» Enable or disable Just My Code

Для большинства языков программирования Только мой код включен по умолчанию. For most programming languages, Just My Code is enabled by default.

  • Чтобы включить или отключить Только мой код в Visual Studio, в разделе сервис >Параметры (илиПараметрыотладки > ) >Отладка >Общие, установите или снимите флажок включить только мой код. To enable or disable Just My Code in Visual Studio, under Tools >Options (or Debug >Options) >Debugging >General, select or deselect Enable Just My Code.

Включение только мой код является глобальным параметром, который применяется ко всем проектам Visual Studio на всех языках. Enable Just My Code is a global setting that applies to all Visual Studio projects in all languages.

отладка «Только мой код» Just My Code debugging

Во время сеанса отладки в окне модули отображаются модули кода, которые отладчик расходуют как мой код (пользовательский код), а также состояние загрузки символов. During a debugging session, the Modules window shows which code modules the debugger is treating as My Code (user code), along with their symbol loading status. Дополнительные сведения см. в разделе Узнайте больше о том, как отладчик прикрепляется к вашему приложению. For more information, see Get more familiar with how the debugger attaches to your app.

![Пользовательский код в окне «модули»](../debugger/media/dbg_justmycode_module.png «Пользовательский код в окне «модули»»)

В окне Стек вызовов или задачи только мой код сворачивает код, не являющийся пользовательским, в серый фрейм кода с заметками [External Code] . In the Call Stack or Tasks window, Just My Code collapses non-user code into a grayed-out annotated code frame labeled [External Code] .

Чтобы открыть модули, Стек вызовов, задачиили большинство других окон отладки, необходимо находиться в сеансе отладки. To open the Modules, Call Stack, Tasks, or most other debugging windows, you must be in a debugging session. Во время отладки в разделе отладка > Windowsвыберите окна, которые нужно открыть. While debugging, under Debug > Windows, select the windows you want to open.

Чтобы просмотреть код в свернутом фрейме [внешний код] , щелкните правой кнопкой мыши в окне Стек вызовов или задач и выберите в контекстном меню команду Показать внешний код . To view the code in a collapsed [External Code] frame, right-click in the Call Stack or Task window, and select Show External Code from the context menu. Развернутые строки внешнего кода заменяют фрейм [внешний код]. The expanded external code lines replace the [External Code] frame.

Отобразить внешний код — это текущий параметр профилировщика пользователя, который применяется ко всем проектам на всех языках, открываемых пользователем. Show External Code is a current user profiler setting that applies to all projects in all languages that are opened by the user.

Дважды щелкнув развернутую внешнюю строку кода в окне Стек вызовов , вы выделяете строку вызывающего кода, зеленую в исходном коде. Double-clicking an expanded external code line in the Call Stack window highlights the calling code line in green in the source code. Для библиотек DLL или других модулей, которые не найдены или не загружены, может открыться страница «символ» или «источник не найден». For DLLs or other modules not found or loaded, a symbol or source not found page may open.

Только мой код .NET .NET Just My Code

В проектах .NET Только мой код использует файлы символов ( . pdb) и оптимизации программы для классификации пользовательского и кода, не являющегося пользовательским. In .NET projects, Just My Code uses symbol (.pdb) files and program optimizations to classify user and non-user code. Отладчик .NET считает оптимизированные двоичные файлы и незагруженные pdb -файл непользовательским кодом. The .NET debugger considers optimized binaries and non-loaded .pdb files to be non-user code.

Три атрибута компилятора также влияют на то, что отладчик .NET считает кодом пользователя: Three compiler attributes also affect what the .NET debugger considers to be user code:

  • DebuggerNonUserCodeAttribute сообщает отладчику, что код, к которому он применяется, не является пользовательским кодом. DebuggerNonUserCodeAttribute tells the debugger that the code it’s applied to isn’t user code.
  • DebuggerHiddenAttribute скрывает код от отладчика, даже если режим «Только мой код» включен. DebuggerHiddenAttribute hides the code from the debugger, even if Just My Code is turned off.
  • DebuggerStepThroughAttribute сообщает отладчику о пошаговом выполнении кода, к которому он применяется, а не по поэтапному выполнению кода. DebuggerStepThroughAttribute tells the debugger to step through the code it’s applied to, rather than step into the code.

Отладчик .NET считает весь Остальный код пользовательским кодом. The .NET debugger considers all other code to be user code.

Во время отладки .NET: During .NET debugging:

  • Отладка >шаг с заходом (или F11) в коде, не относящемся к пользователю, пошаговое описание кода до следующей строки пользовательского кода. Debug >Step Into (or F11) on non-user code steps over the code to the next line of user code.
  • Отладка >Шаг с выходом (или SHIFT +F11) в коде, который не является пользовательским, выполняется на следующей строке пользовательского кода. Debug >Step Out (or Shift+F11) on non-user code runs to the next line of user code.

Если код пользователя больше не существует, отладка будет продолжаться до конца, она достигнет другой точки останова или выдаст ошибку. If there’s no more user code, debugging continues until it ends, hits another breakpoint, or throws an error.

Если отладчик прерывается в коде, отличном от пользователя (например, если используется отладка > прерывать все и приостанавливать в коде, отличном от пользователя), то окно без исходного кода отображается. If the debugger breaks in non-user code (for example, you use Debug > Break All and pause in non-user code), the No Source window appears. Затем можно использовать команду отладка > шага , чтобы перейти к следующей строке пользовательского кода. You can then use a Debug > Step command to go to the next line of user code.

Если необработанное исключение возникает в коде, отличном от пользователя, отладчик прерывает работу в строке кода пользователя, где было создано исключение. If an unhandled exception occurs in non-user code, the debugger breaks at the user code line where the exception was generated.

Если для исключения разрешены первые исключения, вызывающая строка пользовательского кода выделяется зеленым цветом в исходном коде. If first chance exceptions are enabled for the exception, the calling user-code line is highlighted in green in source code. В окне Стек вызовов отображается рамка с заметками [внешний код] . The Call Stack window displays the annotated frame labeled [External Code].

«Только мой код» в C++ C++ Just My Code

Начиная с Visual Studio 2020 версии 15,8, также поддерживается Только мой код для пошагового выполнения кода. Starting in Visual Studio 2020 version 15.8, Just My Code for code stepping is also supported. Эта функция также требует использования переключателя компилятора /жмк (только мой код отладки) . This feature also requires use of the /JMC (Just my code debugging) compiler switch. Параметр включен по умолчанию в C++ проектах. The switch is enabled by default in C++ projects. Для окна стека вызовов и поддержки стека вызовов в только мой код параметр/жмк не требуется. For Call Stack window and call stack support in Just My Code, the /JMC switch is not required.

Для классификации в качестве пользовательского кода PDB-файл для двоичного файла, содержащего пользовательский код, должен быть загружен отладчиком (для проверки это используется окно » модули «). To be classified as user code, the PDB for the binary containing the user code must be loaded by the debugger (use the Modules window to check this).

Для поведения стека вызовов, например в окне стека вызовов , только мой код C++ учитывает только эти функции как код, не являющийся пользовательским: For call stack behavior, such as in the Call Stack window, Just My Code in C++ considers only these functions to be non-user code:

  • Функции с открытой исходной информацией в файле символов. Functions with stripped source information in their symbols file.
  • Функции, в которых файлы символов указывают, что исходный файл, соответствующий кадру стека, отсутствует. Functions where the symbol files indicate that there is no source file corresponding to the stack frame.
  • Функции, указанные в файлах *. натжмк в папке %VsInstallDirectory%\Common7\Packages\Debugger\Visualizers . Functions specified in *.natjmc files in the %VsInstallDirectory%\Common7\Packages\Debugger\Visualizers folder.

Для поведения пошагового кода Только мой код в C++ рассматривает только эти функции как код, не являющийся пользовательским: For code stepping behavior, Just My Code in C++ considers only these functions to be non-user code:

  • Функции для, для которых соответствующий PDB-файл не был загружен в отладчик. Functions for the which the corresponding PDB file has not been loaded in the debugger.
  • Функции, указанные в файлах *. натжмк в папке %VsInstallDirectory%\Common7\Packages\Debugger\Visualizers . Functions specified in *.natjmc files in the %VsInstallDirectory%\Common7\Packages\Debugger\Visualizers folder.

Для поддержки пошагового выполнения кода в C++ только мой код код должен быть скомпилирован с помощью компиляторов компилятором MSVC в Visual Studio 15,8 Preview 3 или более поздней версии, а параметр компилятора/жмк должен быть включен (по умолчанию включен). For code stepping support in Just My Code, C++ code must be compiled using the MSVC compilers in Visual Studio 15.8 Preview 3 or later, and the /JMC compiler switch must be enabled (it is enabled by default). Дополнительные сведения см. в этой записи блога: Настройка C++ стека вызовов и поведение пошагового выполнения кода. For additional details, see Customize C++ call stack and code stepping behavior) and this blog post. Для кода, скомпилированного с помощью более старой версии компилятора, натстепфилтер -файлы являются единственным способом настройки пошагового выполнения кода, который не зависит от только мой код. For code compiled using an older compiler, .natstepfilter files are the only way to customize code stepping, which is independent of Just My Code. См. раздел Настройка C++ пошагового поведения. See Customize C++ stepping behavior.

Во C++ время отладки: During C++ debugging:

  • Отладка >шаг с заходом (или F11) в коде, не относящемся к пользователю, пошаговое описание кода до следующей строки пользовательского кода. Debug >Step Into (or F11) on non-user code steps over the code to the next line of user code.
  • Отладка >Шаг с выходом (или SHIFT +F11) в коде, который не является пользовательским, выполняется на следующей строке пользовательского кода. Debug >Step Out (or Shift+F11) on non-user code runs to the next line of user code.

Если код пользователя больше не существует, отладка будет продолжаться до конца, она достигнет другой точки останова или выдаст ошибку. If there’s no more user code, debugging continues until it ends, hits another breakpoint, or throws an error.

Если отладчик прерывается в коде, отличном от пользователя (например, если используется отладка > прерывать все и приостанавливать в коде, отличном от пользователя), пошаговое выполнение продолжится в коде, не являющемся пользователем. If the debugger breaks in non-user code (for example, you use Debug > Break All and pause in non-user code), stepping continues in the non-user code.

Если отладчик обращается к исключению, он останавливается на исключении, независимо от того, находится ли оно в пользовательском или непользовательском коде. If the debugger hits an exception, it stops on the exception, whether it is in user or non-user code. Необработанные пользователем параметры в диалоговом окне » параметры исключений » игнорируются. User-unhandled options in the Exception Settings dialog box are ignored.

Настройка C++ поведения стека вызовов и пошагового выполнения кода Customize C++ call stack and code stepping behavior

Для C++ проектов можно указать модули, исходные файлы и функции, которые окно стека вызовов обрабатывает как код, не являющийся пользовательским, указав их в файлах *. натжмк . For C++ projects, you can specify the modules, source files, and functions the Call Stack window treats as non-user code by specifying them in *.natjmc files. Эта настройка также применяется к пошаговому выполнению кода, если используется последняя версия компилятора C++ (см. только мой код). This customization also applies to code stepping if you are using the latest compiler (see C++ Just My Code).

  • Чтобы указать непользовательский код для всех пользователей компьютера с Visual Studio, добавьте файл .natjmc в папку %VsInstallDirectory%\Common7\Packages\Debugger\Visualizers. To specify non-user code for all users of the Visual Studio machine, add the .natjmc file to the %VsInstallDirectory%\Common7\Packages\Debugger\Visualizers folder.
  • Чтобы указать непользовательский код для отдельного пользователя, добавьте натжмк -файл в папку %USERPROFILE%\My documents \ \висуализерс . To specify non-user code for an individual user, add the .natjmc file to the %USERPROFILE%\My Documents\ \Visualizers folder.

Файл натжмк — это XML-файл с таким синтаксисом: A .natjmc file is an XML file with this syntax:

Атрибуты элементов модуля Module element attributes

Атрибут Attribute Описание Description
Name Обязательный. Required. Полный путь к модулю или модулям. The full path of the module or modules. Можно использовать подстановочные знаки Windows ? (ноль или один символ) и * (ноль или более символов). You can use the Windows wildcard characters ? (zero or one character) and * (zero or more characters). Например, примененная к объекту директива For example,

указывает отладчику, что необходимо рассматривать все модули в \3rdParty\UtilLibs на любом диске как внешний код. tells the debugger to treat all modules in \3rdParty\UtilLibs on any drive as external code.

Company Необязательный. Optional. Название компании, публикующей модуль, внедренный в исполняемый файл. The name of the company that publishes the module that is embedded in the executable file. Этот атрибут можно использовать для устранения неоднозначности модулей. You can use this attribute to disambiguate the modules.

Атрибуты элементов файла File element attributes

Атрибут Attribute Описание Description
Name Обязательный. Required. Полный путь к файлу или файлам исходного кода, который необходимо считать внешним кодом. The full path of the source file or files to treat as external code. При задании пути можно использовать следующие подстановочные знаки Windows: ? и * . You can use the Windows wildcard characters ? and * when specifying the path.

Атрибуты элементов функций Function element attributes

Атрибут Attribute Описание Description
Name Обязательный. Required. Полное имя функции, которую необходимо рассматривать как внешний код. The fully qualified name of the function to treat as external code.
Module Необязательный. Optional. Имя модуля или полный путь к модулю, содержащему эту функцию. The name or full path to the module that contains the function. Этот атрибут можно использовать для устранения неоднозначности функций с одинаковыми именами. You can use this attribute to disambiguate functions with the same name.
ExceptionImplementation Если задано значение true , стек вызовов отображает функцию, которая создала исключение, а не данную функцию. When set to true , the call stack displays the function that threw the exception rather than this function.

Настройка C++ поведения пошагового выполнения независимо от параметров только мой код Customize C++ stepping behavior independent of Just My Code settings

В C++ проектах можно указать функции для пошагового перехода, перечисляя их как код, не являющийся пользовательским, в файле *. натстепфилтер . In C++ projects, you can specify functions to step over by listing them as non-user code in *.natstepfilter files. Функции, перечисленные в файле *. натстепфилтер , не зависят от параметров только мой код. Functions listed in *.natstepfilter files are not dependent on Just My Code settings.

  • Чтобы указать код, не являющийся пользовательским, для всех локальных пользователей Visual Studio, добавьте натстепфилтер -файл в папку %VsInstallDirectory%\Common7\Packages\Debugger\Visualizers . To specify non-user code for all local Visual Studio users, add the .natstepfilter file to the %VsInstallDirectory%\Common7\Packages\Debugger\Visualizers folder.
  • Чтобы указать непользовательский код для отдельного пользователя, добавьте натстепфилтер -файл в папку %USERPROFILE%\My documents \ \висуализерс . To specify non-user code for an individual user, add the .natstepfilter file to the %USERPROFILE%\My Documents\ \Visualizers folder.

Файл натстепфилтер — это XML-файл с таким синтаксисом: A .natstepfilter file is an XML file with this syntax:

Элемент Element Описание Description
Function Обязательный. Required. Указывает одну или несколько функций как функцию, не написанную пользователем. Specifies one or more functions as non-user functions.
Name Обязательный. Required. Регулярное выражение в формате ECMA-262, содержащее полное имя функции для сопоставления. An ECMA-262 formatted regular expression specifying the full function name to match. Пример: For example:

сообщает отладчику, что все методы в MyNS::MyClass , должны считаться кодом, не написанным пользователем. tells the debugger that all methods in MyNS::MyClass are to be considered non-user code. Сопоставление учитывает регистр. The match is case-sensitive.

Module Необязательный. Optional. Регулярное выражение в формате ECMA-262, указывающее полный путь к модулю, содержащему функцию. An ECMA-262 formatted regular expression specifying the full path to the module containing the function. Сопоставление не учитывает регистр. The match is case-insensitive.
Action Обязательный. Required. Одно из следующих чувствительных к регистру значений: One of these case-sensitive values:

NoStepInto — указывает отладчику выполнить шаг с обходом функции. NoStepInto — tells the debugger to step over the function.
StepInto — указывает отладчику выполнить шаг с заходом в функцию, переопределив все остальные NoStepInto для соответствующей функции. StepInto — tells the debugger to step into the function, overriding any other NoStepInto for the matched function.

«Только мой код» в JavaScript JavaScript Just My Code

Режим «Только мой код» в JavaScript управляет пошаговым выполнением и отображением стека вызовов путем распределения кода по одной из следующих классификаций: JavaScript Just My Code controls stepping and call stack display by categorizing code in one of these classifications:

MyCode MyCode Код пользователя, которым вы распоряжаетесь и управляете. User code that you own and control.
LibraryCode LibraryCode Непользовательский код из библиотек, которые вы регулярно используете, и ваше приложение использует для правильной работы (например, WinJS или jQuery). Non-user code from libraries that you use regularly and your app relies on to function correctly (for example WinJS or jQuery).
UnrelatedCode UnrelatedCode Непользовательский код в вашем приложении, который вы не владеете и ваше приложение не использует для правильной работы. Non-user code in your app that you don’t own and your app doesn’t rely on to function correctly. Например, пакет SDK для рекламы, отображающий рекламу, может быть UnrelatedCode. For example, an advertising SDK that displays ads could be UnrelatedCode. В проектах UWP любой код, загружаемый в приложение из URI HTTP или HTTPS, также считается UnrelatedCode. In UWP projects, any code that is loaded into your app from an HTTP or HTTPS URI is also considered UnrelatedCode.

Отладчик JavaScript классифицирует код как пользователь или не пользователь в следующем порядке: The JavaScript debugger classifies code as user or non-user in this order:

Классификации по умолчанию. The default classifications.

  • Скрипт, выполняемый передачей строки в предоставленную ведущим eval функцию, — myCode. Script executed by passing a string to the host-provided eval function is MyCode.
  • Скрипт, выполняемый путем передачи строки в конструктор Function , — LibraryCode. Script executed by passing a string to the Function constructor is LibraryCode.
  • Скрипт в справочнике по платформе, например WinJS или Azure SDK, — это LibraryCode. Script in a framework reference, such as WinJS or the Azure SDK, is LibraryCode.
  • Скрипт, выполняемый передачей строки в setTimeout , setImmediate или функции setInterval , — это UnrelatedCode. Script executed by passing a string to the setTimeout , setImmediate , or setInterval functions is UnrelatedCode.

Классификации, указанные для всех проектов Visual Studio JavaScript в файле %всинсталлдиректори%\жаваскрипт\жустмикоде\микоде.дефаулт.ВВА.жсон . Classifications specified for all Visual Studio JavaScript projects in the %VSInstallDirectory%\JavaScript\JustMyCode\mycode.default.wwa.json file.

Классификации в файле myCode. JSON текущего проекта. Classifications in the mycode.json file of the current project.

Каждый шаг классификации переопределяет предыдущие шаги. Each classification step overrides the previous steps.

Весь остальной код классифицируется как MyCode. All other code is classified as MyCode.

Можно изменить классификации по умолчанию и классифицировать конкретные файлы и URL-адреса в качестве пользовательского или кода, не являющегося пользовательским кодом, добавив JSON -файл с именем myCode. JSON в корневую папку проекта JavaScript. You can modify the default classifications, and classify specific files and URLs as user or non-user code, by adding a .json file named mycode.json to the root folder of a JavaScript project. См. раздел Настройка JavaScript только мой код. See Customize JavaScript Just My Code.

Во время отладки JavaScript: During JavaScript debugging:

  • Если функция не является пользовательским кодом, отладка >шаг с заходом (или F11) ведет себя так же, как Отладка >Шаг с обходом (или F10). If a function is non-user code, Debug >Step Into (or F11) behaves the same as Debug >Step Over (or F10).
  • Если шаг начинается в коде, не являющемся пользователем (LibraryCode или UnrelatedCode), пошаговое выполнение временно ведет себя так, как если бы только мой код не была включена. If a step begins in non-user (LibraryCode or UnrelatedCode) code, stepping temporarily behaves as if Just My Code isn’t enabled. При переходе к пользовательскому коду Только мой код шаг с заходом снова включается. When you step back to user code, Just My Code stepping is re-enabled.
  • Когда шаг пользовательского кода выходит из текущего контекста выполнения, отладчик останавливается на следующем выполненной строке кода пользователя. When a user code step results in leaving the current execution context, the debugger stops at the next executed user code line. Например, если обратный вызов выполняется в коде LibraryCode, отладчик продолжает выполнение, пока не будет выполнена следующая строка кода пользователя. For example, if a callback executes in LibraryCode code, the debugger continues until the next line of user code executes.
  • Шаг с выходом (или SHIFT +F11) останавливается на следующей строке пользовательского кода. Step Out (or Shift+F11) stops on the next line of user code.

Если код пользователя больше не существует, отладка будет продолжаться до конца, она достигнет другой точки останова или выдаст ошибку. If there’s no more user code, debugging continues until it ends, hits another breakpoint, or throws an error.

Точки останова, заданные в коде, всегда обрабатываются, но код классифицируется. Breakpoints set in code are always hit, but the code is classified.

  • Если ключевое слово debugger встречается в LibraryCode, отладчик всегда останавливается. If the debugger keyword occurs in LibraryCode, the debugger always breaks.
  • Если ключевое слово debugger встречается в UnrelatedCode, отладчик не останавливается. If the debugger keyword occurs in UnrelatedCode, the debugger doesn’t stop.

Если необработанное исключение возникает в коде myCode или LibraryCode , отладчик всегда останавливается. If an unhandled exception occurs in MyCode or LibraryCode code, the debugger always breaks.

Если необработанное исключение возникает в UnrelatedCode, а myCode или LibraryCode находится в стеке вызовов, отладчик прерывает работу. If an unhandled exception occurs in UnrelatedCode, and MyCode or LibraryCode is on the call stack, the debugger breaks.

Если для исключения включены исключения first-шанса, а исключение возникает в LibraryCode или UnrelatedCode: If first-chance exceptions are enabled for the exception, and the exception occurs in LibraryCode or UnrelatedCode:

  • Если исключение обрабатывается, отладчик не останавливается. If the exception is handled, the debugger doesn’t break.
  • Если исключение не обрабатывается, отладчик останавливается. If the exception is not handled, the debugger breaks.

Настройка JavaScript Только мой код Customize JavaScript Just My Code

Чтобы классифицировать пользовательский и непользовательский код для одного проекта JavaScript, можно добавить JSON -файл с именем myCode. JSON в корневую папку проекта. To categorize user and non-user code for a single JavaScript project, you can add a .json file named mycode.json to the root folder of the project.

Спецификации в этом файле переопределяют классификации по умолчанию и файл myCode. Default. ВВА. JSON . Specifications in this file override the default classifications and the mycode.default.wwa.json file. Файлу myCode. JSON не требуется выводить все пары «ключ — значение». The mycode.json file does not need to list all key value pairs. MyCode, библиотекии несвязанные значения могут быть пустыми массивами. The MyCode, Libraries, and Unrelated values can be empty arrays.

В файлах myCode. JSON используется следующий синтаксис: Mycode.json files use this syntax:

«Eval», «Function» и «ScriptBlock» Eval, Function, and ScriptBlock

Пары «ключ-значение» Eval, Function иScriptBlock определяют, как классифицируется динамически создаваемый код: The Eval, Function, and ScriptBlock key value pairs determine how dynamically generated code is classified:

Eval Eval Скрипт, который выполняется путем передачи строки предоставленной хостом функции eval . Script that is executed by passing a string to the host-provided eval function. По умолчанию скрипт Eval классифицируется как MyCode. By default, Eval script is classified as MyCode.
Function Function Скрипт, который выполняется путем передачи строки конструктору Function . Script that is executed by passing a string to the Function constructor. По умолчанию скрипт Function классифицируется как LibraryCode. By default, Function script is classified as LibraryCode.
ScriptBlock ScriptBlock Скрипт, который выполняется путем передачи строки функциям setTimeout , setImmediate или setInterval . Script that is executed by passing a string to the setTimeout , setImmediate , or setInterval functions. По умолчанию скрипт ScriptBlock классифицируется как UnrelatedCode. By default, ScriptBlock script is classified as UnrelatedCode.

Можно изменить это значение на одно из следующих ключевых слов: You can change the value to one of these keywords:

  • MyCode классифицирует скрипт как MyCode. MyCode classifies the script as MyCode.
  • Library классифицирует скрипт как LibraryCode. Library classifies the script as LibraryCode.
  • Unrelated классифицирует скрипт как UnrelatedCode. Unrelated classifies the script as UnrelatedCode.

«MyCode», «Libraries» и «Unrelated» MyCode, Libraries, and Unrelated

Пары «ключ-значение» MyCode, Libraries и Unrelated определяют URL-адреса или файлы, которые нужно включить в классификацию: The MyCode, Libraries, and Unrelated key value pairs specify the URLs or files that you want to include in a classification:

MyCode MyCode Массив URL-адресов или файлы, которые классифицируются как MyCode. An array of URLs or files that are classified as MyCode.
Libraries Libraries Массив URL-адресов или файлы, которые классифицируются как LibraryCode. An array of URLs or files that are classified as LibraryCode.
Unrelated Unrelated Массив URL-адресов или файлы, которые классифицируются как UnrelatedCode. An array of URLs or files that are classified as UnrelatedCode.

URL-адрес или строка файла может содержать один или несколько символов * , которые соответствуют нулю или более символам. The URL or file string can have one or more * characters, which match zero or more characters. * совпадает с .* ом регулярного выражения. * is the same as the regular expression .* .

Массивы

Объекты позволяют хранить данные со строковыми ключами. Это замечательно.

Но довольно часто мы понимаем, что нам необходима упорядоченная коллекция данных, в которой присутствуют 1-й, 2-й, 3-й элементы и т.д. Например, она понадобится нам для хранения списка чего-либо: пользователей, товаров, элементов HTML и т.д.

В этом случае использовать объект неудобно, так как он не предоставляет методов управления порядком элементов. Мы не можем вставить новое свойство «между» уже существующими. Объекты просто не предназначены для этих целей.

Для хранения упорядоченных коллекций существует особая структура данных, которая называется массив, Array .

Объявление

Существует два варианта синтаксиса для создания пустого массива:

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

Элементы массива нумеруются, начиная с нуля.

Мы можем получить элемент, указав его номер в квадратных скобках:

Мы можем заменить элемент:

…Или добавить новый к существующему массиву:

Общее число элементов массива содержится в его свойстве length :

Вывести массив целиком можно при помощи alert .

В массиве могут храниться элементы любого типа.

Список элементов массива, как и список свойств объекта, может оканчиваться запятой:

«Висячая запятая» упрощает процесс добавления/удаления элементов, так как все строки становятся идентичными.

Методы pop/push, shift/unshift

Очередь – один из самых распространённых вариантов применения массива. В области компьютерных наук так называется упорядоченная коллекция элементов, поддерживающая два вида операций:

  • push добавляет элемент в конец.
  • shift удаляет элемент в начале, сдвигая очередь, так что второй элемент становится первым.

Массивы поддерживают обе операции.

На практике необходимость в этом возникает очень часто. Например, очередь сообщений, которые надо показать на экране.

Существует и другой вариант применения для массивов – структура данных, называемая стек.

Она поддерживает два вида операций:

  • push добавляет элемент в конец.
  • pop удаляет последний элемент.

Таким образом, новые элементы всегда добавляются или удаляются из «конца».

Примером стека обычно служит колода карт: новые карты кладутся наверх и берутся тоже сверху:

Массивы в JavaScript могут работать и как очередь, и как стек. Мы можем добавлять/удалять элементы как в начало, так и в конец массива.

В компьютерных науках структура данных, делающая это возможным, называется двусторонняя очередь.

Методы, работающие с концом массива:

Удаляет последний элемент из массива и возвращает его:

Добавляет элемент в конец массива:

Вызов fruits.push(. ) равнозначен fruits[fruits.length] = . .

Методы, работающие с началом массива:

Удаляет из массива первый элемент и возвращает его:

Добавляет элемент в начало массива:

Методы push и unshift могут добавлять сразу несколько элементов:

Внутреннее устройство массива

Массив – это особый подвид объектов. Квадратные скобки, используемые для того, чтобы получить доступ к свойству arr[0] – это по сути обычный синтаксис доступа по ключу, как obj[key] , где в роли obj у нас arr , а в качестве ключа – числовой индекс.

Массивы расширяют объекты, так как предусматривают специальные методы для работы с упорядоченными коллекциями данных, а также свойство length . Но в основе всё равно лежит объект.

Следует помнить, что в JavaScript существует всего 7 основных типов данных. Массив является объектом и, следовательно, ведёт себя как объект.

Например, копируется по ссылке:

…Но то, что действительно делает массивы особенными – это их внутреннее представление. Движок JavaScript старается хранить элементы массива в непрерывной области памяти, один за другим, так, как это показано на иллюстрациях к этой главе. Существуют и другие способы оптимизации, благодаря которым массивы работают очень быстро.

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

Например, технически мы можем сделать следующее:

Это возможно, потому что в основе массива лежит объект. Мы можем присвоить ему любые свойства.

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

Варианты неправильного применения массива:

  • Добавление нечислового свойства, например: arr.test = 5 .
  • Создание «дыр», например: добавление arr[0] , затем arr[1000] (между ними ничего нет).
  • Заполнение массива в обратном порядке, например: arr[1000] , arr[999] и т.д.

Массив следует считать особой структурой, позволяющей работать с упорядоченными данными. Для этого массивы предоставляют специальные методы. Массивы тщательно настроены в движках JavaScript для работы с однотипными упорядоченными данными, поэтому, пожалуйста, используйте их именно в таких случаях. Если вам нужны произвольные ключи, вполне возможно, лучше подойдёт обычный объект <> .

Эффективность

Методы push/pop выполняются быстро, а методы shift/unshift – медленно.

Почему работать с концом массива быстрее, чем с его началом? Давайте посмотрим, что происходит во время выполнения:

Просто взять и удалить элемент с номером 0 недостаточно. Нужно также заново пронумеровать остальные элементы.

Операция shift должна выполнить 3 действия:

  1. Удалить элемент с индексом 0 .
  2. Сдвинуть все элементы влево, заново пронумеровать их, заменив 1 на 0 , 2 на 1 и т.д.
  3. Обновить свойство length .

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

То же самое происходит с unshift : чтобы добавить элемент в начало массива, нам нужно сначала сдвинуть существующие элементы вправо, увеличивая их индексы.

А что же с push/pop ? Им не нужно ничего перемещать. Чтобы удалить элемент в конце массива, метод pop очищает индекс и уменьшает значение length .

Действия при операции pop :

Метод pop не требует перемещения, потому что остальные элементы остаются с теми же индексами. Именно поэтому он выполняется очень быстро.

Аналогично работает метод push .

Перебор элементов

Одним из самых старых способов перебора элементов массива является цикл for по цифровым индексам:

Но для массивов возможен и другой вариант цикла, for..of :

Цикл for..of не предоставляет доступа к номеру текущего элемента, только к его значению, но в большинстве случаев этого достаточно. А также это короче.

Технически, так как массив является объектом, можно использовать и вариант for..in :

Но на самом деле это – плохая идея. Существуют скрытые недостатки этого способа:

Цикл for..in выполняет перебор всех свойств объекта, а не только цифровых.

В браузере и других программных средах также существуют так называемые «псевдомассивы» – объекты, которые выглядят, как массив. То есть, у них есть свойство length и индексы, но они также могут иметь дополнительные нечисловые свойства и методы, которые нам обычно не нужны. Тем не менее, цикл for..in выведет и их. Поэтому, если нам приходится иметь дело с объектами, похожими на массив, такие «лишние» свойства могут стать проблемой.

Цикл for..in оптимизирован под произвольные объекты, не массивы, и поэтому в 10-100 раз медленнее. Увеличение скорости выполнения может иметь значение только при возникновении узких мест. Но мы всё же должны представлять разницу.

В общем, не следует использовать цикл for..in для массивов.

Немного о «length»

Свойство length автоматически обновляется при изменении массива. Если быть точными, это не количество элементов массива, а наибольший цифровой индекс плюс один.

Например, единственный элемент, имеющий большой индекс, даёт большую длину:

Обратите внимание, что обычно мы не используем массивы таким образом.

Ещё один интересный факт о свойстве length – его можно перезаписать.

Если мы вручную увеличим его, ничего интересного не произойдёт. Зато, если мы уменьшим его, массив станет короче. Этот процесс необратим, как мы можем понять из примера:

Таким образом, самый простой способ очистить массив – это arr.length = 0; .

new Array()

Существует ещё один вариант синтаксиса для создания массива:

Он редко применяется, так как квадратные скобки [] короче. Кроме того, у него есть хитрая особенность.

Если new Array вызывается с одним аргументом, который представляет собой число, он создаёт массив без элементов, но с заданной длиной.

Давайте посмотрим, как можно оказать себе медвежью услугу:

Как мы видим, в коде, представленном выше, в new Array(number) все элементы равны undefined .

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

Многомерные массивы

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

toString

Массивы по-своему реализуют метод toString , который возвращает список элементов, разделённых запятыми.

Как писать код и сразу видеть результат

Когда толь­ко начи­на­ешь про­грам­ми­ро­вать и делать сай­ты, важ­но пони­мать, что вооб­ще про­ис­хо­дит. Вот изме­нил ты пара­метр объ­ек­та — а пра­виль­но или нет? Зара­бо­та­ло это или нет? Кра­си­во вышло или ужас­но?

Что­бы раз­ра­бот­чик сра­зу видел резуль­тат тру­да, боги созда­ли для него IDE — integrated development environment, по-русски — сре­ду раз­ра­бот­ки. Это про­грам­ма, в кото­рой про­грам­мист пишет код, ловит ошиб­ки и наблю­да­ет резуль­тат.

Чисто тех­ни­че­ски рабо­тать мож­но и без IDE: писать код в блок­но­те и про­смат­ри­вать его в спе­ци­аль­ных про­грам­мах или бра­у­зе­ре. Но это быва­ет мед­лен­но и тре­бу­ет допол­ни­тель­ных тело­дви­же­ний. Луч­ше научить­ся поль­зо­вать­ся IDE и писать в сто раз быст­рее.

Выбор сре­ды раз­ра­бот­ки (IDE) — дело вку­са и при­выч­ки. Какие-то из них — уни­вер­саль­ные, дру­гие зато­че­ны под кон­крет­ные язы­ки про­грам­ми­ро­ва­ния. IDE часто похо­жи по сво­им воз­мож­но­стям и поз­во­ля­ют уве­ли­чи­вать функ­ци­о­наль­ность за счёт внеш­них допол­не­ний.

Visual Studio Code

Про­грам­му мож­но ска­чать с офи­ци­аль­но­го сай­та. Несмот­ря на то, что VS Code дела­ет Мик­ро­софт, это бес­плат­ный про­дукт с откры­тым исход­ным кодом, доступ­ный на всех плат­фор­мах. Бла­го­да­ря это­му и сво­им воз­мож­но­стям VS Code стал одной из самых попу­ляр­ных сред для раз­ра­бот­ки в мире.

VS Code рас­по­зна­ёт почти все суще­ству­ю­щие язы­ки про­грам­ми­ро­ва­ния, само­сто­я­тель­но или с помо­щью пла­ги­нов, и фор­ма­ти­ру­ет их соот­вет­ству­ю­щим обра­зом. Кро­ме это­го, у него глу­бо­кая под­держ­ка HTML, CSS, JavaScript и PHP — он про­сле­дит за пар­ны­ми тега­ми, закры­ты­ми скоб­ка­ми и ошиб­ка­ми в коман­дах.

Вот самые инте­рес­ные воз­мож­но­сти VS Code.

Умное авто­до­пол­не­ние. Про­грам­ма ана­ли­зи­ру­ет, какую коман­ду вы хоти­те вве­сти, и пред­ла­га­ет закон­чить фра­зу за вас, с под­сказ­ка­ми и объ­яс­не­ни­ем. Удоб­но, если вы забы­ли поря­док сле­до­ва­ния пере­мен­ных или как точ­но зву­чит нуж­ная коман­да:

Выпол­не­ние скрип­тов по шагам. Ино­гда нуж­но иметь воз­мож­ность выпол­нить скрипт не сра­зу, а по шагам, напри­мер, что­бы понять, не зацик­ли­лась ли наша про­грам­ма. Для это­го исполь­зуй­те встро­ен­ный дебаг­гер — это про­грам­ма, кото­рая сле­дит за кодом, ищет в нём ошиб­ки и поз­во­ля­ет выпол­нять его поэтап­но.

Мно­же­ствен­ное выде­ле­ние и поиск. Что­бы поме­нять мно­го оди­на­ко­вых зна­че­ний пере­мен­ных или най­ти все оди­на­ко­вые сло­ва или коман­ды, VS Code исполь­зу­ет свой алго­ритм обра­бот­ки. Бла­го­да­ря это­му редак­ти­ро­вать код ста­но­вит­ся про­ще, а заме­на функ­ций или пере­мен­ных про­ис­хо­дит быст­рее.

Муль­ти­кур­сор помо­га­ет вво­дить оди­на­ко­вые зна­че­ния сра­зу на несколь­ких стро­ках

Най­ден­ные оди­на­ко­вые сло­ва и коман­ды мож­но тут же заме­нить на дру­гие

Нави­га­ция по коду и опи­са­ния функ­ций. Когда пишешь боль­шую про­грам­му, лег­ко забыть то, что делал в нача­ле — как рабо­та­ет функ­ция или како­го типа пере­мен­ная исполь­зу­ет­ся в этом месте. Что­бы это­го избе­жать, VS Code может пока­зы­вать саму функ­цию, опи­са­ние пере­мен­ной или какие пара­мет­ры пере­да­ют­ся при вызо­ве коман­ды. Ещё это при­го­дит­ся, если код достал­ся вам по наслед­ству от про­шло­го раз­ра­бот­чи­ка и нуж­но быст­ро понять, какие кус­ки кода за что отве­ча­ют и как рабо­та­ют:

Сра­зу после уста­нов­ки VS Code не уме­ет пока­зы­вать резуль­та­ты рабо­ты кода, когда мы дела­ем веб-страницы. Это мож­но испра­вить с помо­щью рас­ши­ре­ния Live HTML Previewer. Для это­го захо­дим в раз­дел «Extensions», щёл­кая на послед­нем знач­ке на пане­ли сле­ва или нажи­мая Ctrl+Shift+X, и начи­на­ем писать «Live HTML Previewer» в стро­ке поис­ка.

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

WebStorm

Сре­да раз­ра­бот­ки для JavaScript от ком­па­нии jetBrains сто­ит денег, но есть проб­ный пери­од в 30 дней. Вполне хва­тит, что­бы попро­бо­вать и понять, нуж­на эта про­грам­ма или нет.

Авто­под­ста­нов­ка. Неко­то­рые IDE с авто­под­ста­нов­кой тор­мо­зят и не пред­ла­га­ют сра­зу все вари­ан­ты пере­мен­ных или команд — но не WebStorm. Здесь всё рабо­та­ет с пер­вой бук­вы и пони­ма­ет, когда надо пред­ло­жить пере­мен­ную, а когда коман­ду или слу­жеб­ное сло­во:

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

Про­вер­ка оши­бок. WebStorm уме­ет сам про­ве­рять код на ошиб­ки и пояс­нять каж­дую из них. Не все­гда это рабо­та­ет иде­аль­но, но когда рабо­та­ет — эко­но­мит кучу вре­ме­ни:

Что­бы сра­зу видеть, что полу­ча­ет­ся на стра­ни­це, нам пона­до­бит­ся пла­гин LiveEdit. По умол­ча­нию он выклю­чен, но его мож­но вклю­чить или поста­вить отдель­но в любое вре­мя. После акти­ва­ции нуж­но будет в настрой­ках пла­ги­на поста­вить галоч­ку «Update application in Chrome on changes in» — она как раз отве­ча­ет за обнов­ле­ние инфор­ма­ции в бра­у­зе­ре Chrome. Теперь мож­но писать код и сра­зу видеть резуль­тат:

Sublime Text 3

Бес­плат­ный редак­тор, кото­рый назой­ли­во пред­ла­га­ет зане­сти денег раз­ра­бот­чи­кам. Про Sublime Text у нас есть отдель­ная и более подроб­ная ста­тья — почи­тай­те, там тоже инте­рес­но.

Sublime Text — потря­са­ю­ще мощ­ный тек­сто­вый редак­тор. Его сила — в ско­ро­сти рабо­ты, он оди­на­ко­во быст­ро обра­бо­та­ет про­стую веб-страничку или про­грам­му на сто тысяч строк кода. Под­свет­ка син­так­си­са всех воз­мож­ных язы­ков про­грам­ми­ро­ва­ния, авто­под­ста­нов­ка, умное закры­тие тегов — всё это доступ­но сра­зу после уста­нов­ки.

Вот что ещё уме­ет про­грам­ма сра­зу после уста­нов­ки:

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

Вто­рая супер­спо­соб­ность, кото­рая пре­вра­ща­ет Sublime Text из про­сто­го тек­сто­во­го редак­то­ра в уни­вер­саль­ное реше­ние, — пла­ги­ны. По прин­ци­пу дей­ствия они такие же, как и в дру­гих про­грам­мах из обзо­ра, но они совер­шен­но не вли­я­ют на ско­рость рабо­ты. Когда начи­на­ешь плот­но рабо­тать с Sublime Text, может пока­зать­ся, что у него есть пла­ги­ны для все­го. Нуж­но редак­ти­ро­вать одно­вре­мен­но один и тот же код, но в раз­ных пане­лях — пожа­луй­ста, напи­сать быст­ро HTML-код — само собой, про­ве­рить код на ошиб­ки и недо­чё­ты — без про­блем.

Emmet сокра­ща­ет вре­мя на напи­са­ние кода, под­став­ляя вме­сто стан­дарт­ных команд целые кус­ки гото­во­го кода

JavaScript & NodeJS Snippets упро­ща­ет напи­са­ние кода на JavaScript и рабо­та­ет по тому же прин­ци­пу, что и Emmet

SublimeCodeIntel помо­га­ет быст­ро разо­брать­ся в коде со мно­же­ством функ­ций. Если щёлк­нуть на назва­ние любой функ­ции, пла­гин сра­зу пока­жет вам её опи­са­ние.

Так как эта ста­тья — для начи­на­ю­щих про­грам­ми­стов, кото­рым важ­но сра­зу видеть изме­не­ния в коде, то посмот­рим, как это дела­ет Sublime Text.

Сра­зу после уста­нов­ки он это­го делать не уме­ет, но нам помо­жет пла­гин LiveReload. Он пока­зы­ва­ет все изме­не­ния в бра­у­зе­ре, как толь­ко мы сохра­ня­ем рабо­чий файл с кодом. Это не так изящ­но, как в VS Code, но в слу­чае с Sublime Text про­сти­тель­но. Дело в том, что при­вык­нув одна­жды писать в нём код, слож­но пере­сесть на что-то дру­гое, что рабо­та­ет с той же ско­ро­стью. Уста­нов­ка LiveReload состо­ит из двух ком­по­нен­тов — пла­гин для Sublime Text и рас­ши­ре­ние для бра­у­зе­ра.

После уста­нов­ки давай­те посмот­рим, что у нас полу­чи­лось. Созда­дим файл tested.html в Sublime Text, раз­ме­тим его внут­ри стан­дарт­ным шаб­ло­ном как HTML-документ, а рядом откро­ем окно бра­у­зе­ра.

В реаль­ном вре­ме­ни мы не уви­дим на стра­ни­це те изме­не­ния, кото­рые вно­сим в код, как это было в VS Code. Но если нажать Ctrl+S, что­бы сохра­нить все дан­ные, то бра­у­зер момен­таль­но пока­зы­ва­ет то, что мы сде­ла­ли.

Если вы серьёз­но настро­е­ны про­грам­ми­ро­вать, при­смот­ри­тесь к Visual Studio Code. Почти со всем он справ­ля­ет­ся сам или с пла­ги­на­ми, не нуж­но под­клю­чать допол­ни­тель­но бра­у­зе­ры или сто­рон­ний софт.

Люби­те, что­бы после уста­нов­ки были доступ­ны почти все нуж­ные функ­ции? Попро­буй­те WebStorm — плат­ную, но мощ­ную сре­ду раз­ра­бот­ки.

Если вам важ­на ско­рость рабо­ты в любых ситу­а­ци­ях, то Sublime Text — луч­ший выбор. Он очень быст­рый, и для него есть пла­ги­ны почти на все слу­чаи жиз­ни.

15 правил написания качественного кода

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

Правило 1. Следуйте стандартам оформления кода.

У каждого языка программирования есть свой стандарт оформления кода, который говорит, как надо делать отступы, где ставить пробелы и скобки, как называть объекты, как комментировать код и т.д.

Например, в этом куске кода в соответствии со стандартом есть 12 ошибок:

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

Многие организации подстраивают стандарты под свои специфические нужды. Например, Google разработал стандарты для более чем 12 языков программирования. Они хорошо продуманы, так что изучите их, если вам нужна помощь в программировании под Google. Стандарты даже включают в себя настройки редактора, которые помогут вам соблюдать стиль, и специальные инструменты, верифицирующие ваш код на соответствию этому стилю. Используйте их.

Правило 2. Давайте наглядные имена.

Ограниченные медленными, неуклюжими телетайпами, программисты в древности использовали контракты для имён переменных и процедур, чтобы сэкономить время, стуки по клавишам, чернила и бумагу. Эта культура присутствует в некоторых сообществах ради сохранения обратной совместимости. Возьмите, например, ломающую язык функцию C wcscspn (wide character string complement span). Но такой подход неприменим в современном коде.

4 октября 2020 – 1 марта 2020, Москва и онлайн, беcплатно

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

Гораздо важнее, чтобы вы долго и хорошо думали перед тем, как что-то назвать. Является ли имя точным? Имели ли вы в виду highestPrice или bestPrice? Достаточно ли специфично имя, дабы избежать его использования в других контекстах для схожих по смыслу объектов? Не лучше ли назвать метод getBestPrice заместо getBest? Подходит ли оно лучше других схожих имён? Если у вас есть метод ReadEventLog, вам не стоит называть другой NetErrorLogRead. Если вы называете функцию, описывает ли её название возвращаемое значение?

В заключение, несколько простых правил именования. Имена классов и типов должны быть существительными. Название метода должно содержать глагол. Если метод определяет, является ли какая-то информация об объекте истинной или ложной, его имя должно начинаться с «is». Методы, которые возвращают свойства объектов, должны начинаться с «get», а устанавливающие значения свойств — «set».

Правило 3. Комментируйте и документируйте.

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

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

Правило 4. Не повторяйтесь.

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

  • Создание справочников API из комментариев, используя Javadoc и Doxygen.
  • Автоматическая генерация Unit-тестов на основе аннотаций или соглашений об именовании.
  • Генерация PDF и HTML из одного размеченного источника.
  • Получение структуры классов из базы данных (или наоборот).

Правило 5. Проверяйте на ошибки и реагируйте на них.

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

Правило 6. Разделяйте код на короткие, обособленные части.

Каждый метод, функция или блок кода должн умещаться в обычном экранном окне (25-50 строк). Если получилось длиннее, разделите на более короткие куски. Даже внутри метода разделяйте длинный код на блоки, суть которых вы можете описать в комментарии в начале каждого блока.

Более того, каждый класс, модуль, файл или процесс должен выполнять определённый род задач. Если часть кода выполняет совершенно разнородные задачи, то разделите его соответственно.

Правило 7. Используйте API фреймворков и сторонние библиотеки.

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

Правило 8. Не переусердствуйте с проектированием.

Проектируйте только то, что актуально сейчас. Ваш код можно делать довольно обобщённым, чтобы он поддерживал дальнейшее развитие, но только в том случае, если он не становится от этого слишком сложным. Не создавайте параметризованные классы, фабрики, глубокие иерархии и скрытые интерфейсы для решения проблем, которых даже не существует — вы не можете угадать, что случится завтра. С другой стороны, когда структура кода не подходит под задачу, не стесняйтесь рефакторить его.

Правило 9. Будьте последовательны.

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

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

Правило 10. Избегайте проблем с безопасностью.

Современный код редко работает изолированно. У него есть неизбежный риск стать мишенью атак. Они необязательно должны приходить из интернета; атака может происходить через входные данные вашего приложения. В зависимости от вашего языка программирования и предметной области, вам возможно стоит побеспокоиться о переполнении буфера, кросс-сайтовых сценариях, SQL-инъекциях и прочих подобных проблемах. Изучите эти проблемы, и избегайте их в коде. Это не сложно.

Правило 11. Используйте эффективные структуры данных и алгоритмы.

Простой код часто легче сопровождать, чем такой же, но изменённый ради эффективности. К счастью, вы можете совмещать сопровождаемость и эффективность, используя структуры данных и алгоритмы, которые даёт ваш фреймворк. Используйте map, set, vector и алгоритмы, которые работают с ними. Благодаря этому ваш код станет чище, быстрее, более масштабируемым и более экономным с памятью. Например, если вы сохраните тысячу значений в отсортированном множестве, то операция пересечения найдёт общие элементы с другим множеством за такое же число операций, а не за миллион сравнений.

Правило 12. Используйте Unit-тесты.

Сложность современного ПО делает его установку дороже, а тестирование труднее. Продуктивным подходом будет сопровождение каждого куска кода тестами, которые проверяют корректность его работы. Этот подход упрощает отладку, т.к. он позволяет обнаружить ошибки раньше. Unit-тестирование необходимо, когда вы программируете на языках с динамической типизацией, как Python и JavaScript, потому что они отлавливают любые ошибки только на этапе исполнения, в то время как языки со статической типизацией наподобие Java, C# и C++ могут поймать часть из них во время компиляции. Unit-тестирование также позволяет рефакторить код уверенно. Вы можете использовать XUnit для упрощения написания тестов и автоматизации их запуска.

Правило 13. Сохраняйте код портируемым.

Если у вас нет особой причины, не используйте функциональность, доступную только на определённой платформе. Не полагайтесь на то, что определённые типы данных (как integer, указатели и временные метки) будут иметь конкретную длину (например, 32 бита), потому что этот параметр отличается на разных платформах. Храните сообщения программы отдельно от кода и на зашивайте параметры, соответствующие определённой культуре (например, разделители дробной и целой части или формат даты). Соглашения нужны для того, чтобы код мог запускаться в разных странах, так что сделайте локализацию настолько безболезненной, насколько это возможно.

Правило 14. Делайте свой код собираемым.

Простая команда должна собирать ваш код в форму, готовую к распространению. Команда должна позволять вам быстро выполнять сборку и запускать необходимые тесты. Для достижения этой цели используйте средства автоматической сборки наподобие Make, Apache Maven, или Ant. В идеале, вы должны установить интеграционную систему, которая будет проверять, собирать и тестировать ваш код при любом изменении.

Правило 15. Размещайте всё в системе контроля версий.

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

Заключение.

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

Цукерберг рекомендует:  Тест по Python. Python для Data Science
Понравилась статья? Поделиться с друзьями:
Все языки программирования для начинающих