KDevelop4/Manual/Working with source code/uk: Difference between revisions

From KDE Wiki Sandbox
(Created page with "{{Input|<syntaxhighlight lang="cpp"> for (typename Triangulation<dim,spacedim>::active_cell_iterator cell = triangulation.begin_active(); cell != triangulation.end...")
(Created page with "{{Note_(uk)|Розфарбовування локальних змінних можна вимкнути за допомогою пункту <menuchoice>Параметри......")
 
(185 intermediate revisions by 2 users not shown)
Line 3: Line 3:
== Робота з кодом програм ==
== Робота з кодом програм ==


Besides debugging, reading through and writing source code is what you will spend the most time with when developing software. To this end, '''KDevelop''' offers you many many different ways to explore source codes and to make writing it more productive. As discussed in more detail in the following sections, '''KDevelop''' is not just a source editor &mdash; rather, it is a source management system that gives you different views of extracted information on the files that collectively make up your session's source code.
Окрім зневаджування, читання та написання коду є найважливішими завданнями під час розробки програмного забезпечення. З метою полегшення навігації кодом та його написання у '''KDevelop''' передбачено багато різних інструментів. Як буде докладніше показано у наступних розділах, '''KDevelop''' не просто редактор коду, — це скоріше система керування кодом, яка може подавати різні дані, отримані на основі аналізу загальної сукупності коду всього вашого сеансу роботи.
<span id="Tools and views"></span>
<span id="Tools and views"></span>
=== Інструменти та панелі перегляду ===
=== Інструменти та панелі перегляду ===
Line 9: Line 9:
[[Image:kdevelop-7.png|thumb|500px|center]]
[[Image:kdevelop-7.png|thumb|500px|center]]


In order to work with projects, '''KDevelop''' has the concept of ''tools''. A tool provides a particular view of the source, or an action that can be taken with it. Tools are represented by buttons around the perimeter of your window (in vertical text along the left and right margins, or horizontally along the bottom margin). If you click on them, they expand to a subwindow &mdash; a ''view'' &mdash; within the main window; if you click on the tool button again, the subwindow disappears again.  
Для роботи з проектами у '''KDevelop''' передбачено ''інструменти''. Інструмент надає певні дані щодо коду або виконує з ним певну дію. Інструментам відповідають кнопки вздовж периметра вікна програми (з вертикальним текстом на полях ліворуч і праворуч та горизонтальним вздовж нижнього поля). Якщо ви натиснете таку кнопку, у головному вікні буде відкрито підвікно — ''панель перегляду''; якщо кнопку буде натиснуто ще раз, відповідне підвікно буде закрито.  


{{Note|1=To make a subwindow disappear, you can also click at the <menuchoice>x</menuchoice> at the top right of the subwindow; however, at least with '''KDevelop''' 4.2.x, this also removes the button representing the tool from the perimeter, which was your way of getting the subwindow back. See below for how to get the button back onto the perimeter in the same way as getting any tool's button there. This behavior has been reported as [http://bugs.kde.org/show_bug.cgi?id=270018 bug 270018]}}  
{{Note_(uk)|1=Закрити панель можна також натисканням кнопки <menuchoice>x</menuchoice>, розташованої у верхньому правому куті панелі.}}  


The picture above shows a particular selection of tools, aligned on the left and right margins; in the picture, the '''Classes''' tool is open on the left and the '''Snippets''' tool on the right, along with an editor for a source file in the middle. In practice, most of the time you will probably only have the editor and maybe the '''Classes''' or '''Code Browser''' tool open at the left. Other tool view will likely only be open temporarily as you use the tool, leaving more space for the editor most of the time.
На наведеному вище зображенні ви можете бачити певний набір інструментів, вирівняних за лівим і правим полем. Ліворуч відкрито панель інструмента <menuchoice>Класи</menuchoice>, праворуч — <menuchoice>Фрагменти</menuchoice>. Посередині можна бачити панель редактора. З практичних міркувань, переважну частину часу розробки варто працювати лише з редактором та панеллю <menuchoice>Класи</menuchoice> чи <menuchoice>Перегляд коду</menuchoice>, відкритою ліворуч. На час використання певного інструмента можна відкрити його панель, яку після використання варто закрити з метою збільшення простору для панелі редактора.


When you run '''KDevelop''' the first time, you should already have the <menuchoice>Projects</menuchoice> tool button. Click on it: it will open a subwindow that shows the projects you have added to the session at the bottom, and a file system view of the directories of your projects at the top.
Після першого запуску '''KDevelop''' ви вже зможете скористатися кнопкою інструмента <menuchoice>Проекти</menuchoice>. Натисніть цю кнопку: у відповідь буде відкрито панель зі списком проектів, які було додано до сеансу у нижній частині вікна та панель перегляду файлової системи вашого проекту у верхній його частині.


There are many other tools you can use with '''KDevelop''', not all of which are initially present as buttons on the perimeter. To add some, go to the <menuchoice>Windows -> Add tool view</menuchoice> menu entry. Here are some that you will likely find useful:
У '''KDevelop''' ви можете скористатися багатьма [[Special:myLanguage/KDevelop4/Manual/Tool_list|іншими інструментами]], не всі з них представлено кнопками вздовж периметра вікна у початковому стані. Щоб додати кнопку, скористайтеся пунктом меню <menuchoice>Вікна -> Додати панель інструмента</menuchoice>. Ось перелік можливих корисних інструментів:


* '''Classes''': A complete list of all classes that are defined in one of the projects or your session with all of their member functions and variables. Clicking on any of the members opens a source editor window at the location of the item you clicked on.
* '''Класи''': повний список всіх класів, які визначено у одному з проектів або у вашому сеансі з усіма вбудованими функціями та змінними. Натискання пункту елемента класу відкриє вікно редактора з місцем оголошення елемента, пункт якого було натиснуто.


* '''Documents''': Lists some of the more recently visited files, by kind (e.g. source files, patch files, plain text documents).
* '''Документи''': містить список нещодавно відкритих файлів за типами (наприклад, файли з кодом, файли латок, звичайні текстові документи).


* '''Code Browser''': Depending on your cursor position in a file, this tool shows things that are related. For example, if you are on an <code>#include</code> line, it shows information about the file you are including such as what classes are declared in that file; if you are on an empty line at file scope, it shows the classes and functions declared and defined in the current file (all as links: clicking on them brings you to the point in the file where the declaration or definition actually is); if you are in a function definition, it shows where the declaration is and offers a list of places where the function is used.
* '''Перегляд коду''': залежно від розташування курсора у редакторі файла, на цій панелі буде показано пов’язані з кодом дані. Наприклад, якщо курсор перебуває у рядку з <code>#include</code>, на панелі буде показано дані щодо файла, який включено до коду, зокрема дані щодо оголошених у файлі класів. Якщо курсор перебуває на порожньому рядку у файлі, на панелі буде показано класи і функції, оголошені і визначені у поточному файлі (всі як посилання: натискання відповідного пункту відкриватиме файл з оголошенням або визначенням класу чи функції). Якщо курсор перебуває на визначенні функції, на панелі буде показано місце оголошення та список місць, у яких використано функцію.


* '''Файлова система''': показує ієрархічну структуру файлової системи.
* '''Файлова система''': показує ієрархічну структуру файлової системи.
Line 29: Line 29:
* '''Документація''': надає вам змогу виконувати пошук даних на сторінках довідника (man) та у інших довідкових документах.
* '''Документація''': надає вам змогу виконувати пошук даних на сторінках довідника (man) та у інших довідкових документах.


* '''Snippets''': This provides sequences of text that one uses over an over and doesn't want to write every time. For example, in the project from which the picture above was created, there is a frequent need to write code like <br /><code>for (typename Triangulation&lt;dim&gt;::active_cell_iterator cell = triangulation.begin_active(); cell != triangulation.end(); ++cell)</code><br />This is an awkward expression but it will look almost exactly like this everytime you need such a loop &mdash; which would make it a good candidate for a snippet.
* '''Фрагменти''': на цій панелі буде наведено фрагменти тексту, які використовують вами регулярно, і які ви не хочете повторно вводити кожного разу. Наприклад, на основі якого було створено знімок екрана, була потреба часто використовувати фрагмент коду <br />
{{Input|1=<nowiki>for (typename Triangulation&lt; dim&gt;::active_cell_iterator cell
      = triangulation.begin_active();
  cell != triangulation.end();
  ++cell)</nowiki>}}<br />Вираз доволі незграбний, але використовується майже у такій формі кожного разу, коли вам потрібен цикл, — чудовий кандидат на включення до списку фрагментів.


* '''Konsole''': відкриває панель командного рядка у головному вікні '''KDevelop''', щоб ви могли віддати потрібну вам команду оболонки (наприклад, виконати <code>./configure</code>).
* '''Konsole''': відкриває панель командного рядка у головному вікні '''KDevelop''', щоб ви могли віддати потрібну вам команду оболонки (наприклад, виконати <code>./configure</code>).


З повним списком інструментів та панелей перегляду можна ознайомитися [[Special:myLanguage/KDevelop4/Manual/Tool list|тут]].
Для багатьох програмістів найважливішою є економія вертикального місця на екрані. Щоб досягти такої економії, ви можете розташувати панелі інструментів вздовж лівої та правої межі вікна програми. Щоб пересунути панель, клацніть на заголовку правою кнопкою миші і виберіть нове її розташування.
 
For many programmers, vertical screen space is the most important. To this end, you can arrange your
tool views at the left and right margin of the window: to move a tool, click on its symbol with the right mouse button and select a new position for it.
<span id="Exploring source code"></span>
<span id="Exploring source code"></span>
=== Огляд роботи з кодом ===
=== Огляд роботи з кодом ===
Line 42: Line 43:
==== Локальні дані ====
==== Локальні дані ====


'''KDevelop''' ''understands'' source code, and as a consequence it is really good at providing you information about variables or functions that may appear in your program. For example, here is a snapshot of working with a piece of code and hovering the mouse over the symbol <code>cell</code> in line 1316 (if you are working keyboard oriented, you can achieve the same effect by holding down the <keycap>Alt</keycap> key for a while):
'''KDevelop''' ''розуміє'' код програми, тому це середовище може надавати вам дані щодо змінних або функцій вашої програми. Наприклад, у цьому підручнику наведено знімок роботи з фрагментом коду, де вказівник миші наведено на символ <code>cell</code> у рядку 1316 (якщо ви надаєте перевагу роботі за допомогою клавіатури, того самого ефекту можна досягти утримуванням певний час натиснутою клавіші <keycap>Alt</keycap>):


[[Image:kdevelop-13.png|thumb|600px|center]]
[[Image:kdevelop-13.png|thumb|600px|center]]


'''KDevelop''' shows me a tooltip that includes the type of the variable (here: <code>DoFHandler&lt;dim&rt;active_cell_iterator</code>), where this variable is declared (the ''container'', which here is the surrounding function <code>get_maximal_velocity</code> since it is a local variable), what it is (a variable, not a function, class or namespace) and where it is declared (in line 1314, just a few lines up in the code).
'''KDevelop''' показує підказку, зокрема тип змінної (тут: <code>DoFHandler&lt;dim&gt;active_cell_iterator</code>), де цю змінну оголошено (''контейнер'', яким тут є функція-обгортка <code>get_maximal_velocity</code>, оскільки це локальна змінна), тип даних (змінна, не функція, клас або простір назв) та місце оголошення (у рядку 1314, декілька рядків коду).


In the current context, the symbol over which the mouse was hovering has no associated documentation. In this example, had the mouse hovered over the symbol <code>get_this_mpi_process</code> in line 1318, the outcome would have been this:
У поточному контексті з символом, на який наведено вказівник миші, не пов’язано жодної документації. У нашому прикладі, де вказівник миші наведено на символ <code>get_this_mpi_process</code> у рядку 1318, буде показано такі дані:


[[Image:kdevelop-14.png|thumb|600px|center]]
[[Image:kdevelop-14.png|thumb|600px|center]]


Here, '''KDevelop''' has cross-referenced the declaration from an entirely different file (<code>utilities.h</code>, which in fact even resides in a different project of the same session) together with the doxygen-style comment that accompanies the declaration there.
Тут '''KDevelop''' показано оголошення зі стороннього файла (<code>utilities.h</code>, який є частиною зовсім іншого проекту того самого сеансу) разом з коментарем у форматі doxygen, який супроводжує цей оголошення.


What makes these tooltips even more useful is that they are dynamic: I can click on the container to get information about the context in which the variable is declared (i.e. about the namespace <code>System</code>, such as where it is declared, defined, used, or what its documentation is) and I can click on the blue links that will reset the cursor position to the location of the declaration of the Symbol (e.g. in <code>utilities.h</code>, line 289) or give me a list of places where this symbol is used in the current file or throughout all the projects of the current session. The latter is often useful if you want to explore how, for example, a particular function is used in a large code basis.
Ще кориснішими підказки робить те, що вони є динамічними: можна натиснути пункт контейнера, щоб отримати дані щодо контексту, у якому оголошено змінну (тобто дані щодо простору назв <code>System</code>, зокрема місця його оголошення, визначення, використання та документації), і можна натиснути сині посилання, які повернуть курсор на позицію оголошення символу (наприклад, у <code>utilities.h</code>, рядок 289) або покажуть список місць, у яких використано символ у поточному файлі або усіх проектах поточного сеансу. Остання можливість буде корисною, якщо вам потрібно визначити, як, наприклад, певну функцію використано у об’ємному коді.


{{Note|1=The information in a tooltip is fleeting &mdash; it depends on you holding the <keycap>Alt</keycap> key down or hovering your mouse. If you want a more permanent place for it, open the '''Code Browser''' tool view in one of the sub-windows. For example, here the cursor is on the same function as in the example above, and the tool view on the left presents the same kind of information as in the tooltip before:<!--}}-->
{{Note_(uk)|1=Панель підказки з часом зникатиме: щоб її знову відкрити доведеться знов утримувати натиснутою клавішу <keycap>Alt</keycap> або наводити вказівник миші на фрагменти коду. Якщо вам потрібно зафіксувати дані з цієї панелі, відкрийте панель інструмента <menuchoice>Перегляд коду</menuchoice>. У нашому прикладі курсор перебуває у тій самій функції, що і раніше, а на панелі інструмента ліворуч показано той самий набір даних, що і на панелі підказки раніше:<!--}}-->


[[Image:kdevelop-15.png|thumb|500px|center]]
[[Image:kdevelop-15.png|thumb|500px|center]]


<!--{{-->Moving the cursor around on the right changes the information presented on the left. What's more, clicking on the <menuchoice>Lock current view</menuchoice> button at the top right allows you to lock this information, making it independent of the cursor movement while you explore the information presented there.}}
<!--{{-->Пересування курсора у правій частині вікна призводитиме до зміни даних у його лівій частині. Натискання кнопки <menuchoice>Заблокувати поточний перегляд</menuchoice> у верхній правій частині надасть вам змогу зафіксувати дані, убезпечивши їх від зміни розташування курсора на час перегляду.}}


{{Note|1=This sort of context information is available in many other places in '''KDevelop''', not just in the source editor. For example, holding down the <keycap>Alt</keycap> key in a completion list (e.g. when doing a quick-open) also yields context information about the current symbol.}}
{{Note_(uk)|1=Доступ до контекстних даних такого типу можна отримати з багатьох частин '''KDevelop''', не лише з панелі редактора коду. Наприклад, утримування натиснутою клавіші <keycap>Alt</keycap> у списку автоматичного доповнення (наприклад, під час пришвидшеного відкриття якогось файла) також призводитиме до показу контекстних даних щодо поточного рядка.}}


==== Дані щодо окремих файлів ====
==== Дані щодо окремих файлів ====


The next level up is to obtain information about the entire source file you are currently working on. To this end, position the cursor at file scope in the current file and look at the what the '''Code Browser''' tool view shows:
Наступним рівнем є отримання даних щодо всього файла коду, над яким ви працюєте. Щоб переглянути її, розташуйте курсор на початку поточного файла і подивіться на дані, які буде показано на панелі інструмента '''Перегляд коду''':


[[Image:kdevelop-16.png|thumb|600px|center]]
[[Image:kdevelop-16.png|thumb|600px|center]]


Here, it shows a list of namespaces, classes and functions declared or defined in the current file, giving you an overview of what's happening in this file and a means to jump directly to any of these declarations or definitions without scrolling up and down in the file or searching for a particular symbol.
Тут середовищем показано список просторів назв, класів та функцій, оголошених або визначених у поточному файлі. За допомогою цього списку ви можете ознайомитися з загальними даними щодо дій, які виконуються у файлі, та безпосередньо перейти до будь-якого з оголошень або визначень без потреби у гортанні коду файла або пошуку певного фрагмента.


{{Note|1=The information shown for file scope is the same as presented in the "Outline" mode discussed below for navigating source code; the difference is that outline mode is only a temporary tooltip.}}
{{Note_(uk)|1=Дані, які показано для всього файла, є тими самими, які буде показано у режимі «Огляд», обговорення якого у контексті навігації кодом викладено далі. Відмінність полягає у тому, що у режимі огляду ці дані буде показано лише на тимчасовій панелі підказки.}}


==== Дані щодо проектів та сеансів ====
==== Дані щодо проектів та сеансів ====


There are many ways to obtain information about an entire project (or, in fact, about all projects in a session). This sort of information is typically provided through various tool views. For example, the '''Classes''' tool view provides a tree structure of all classes and surrounding namespaces for all projects in a session, together with the member functions and variables of each of these classes:
Існує багато способів отримати загальні дані щодо проекту (або, фактично, всіх проектів сеансу). Такі дані, зазвичай, можна знайти на панелях перегляду різноманітних інструментів середовища. Наприклад, на панелі інструмента <menuchoice>Класи</menuchoice> показано ієрархічну структуру всіх класів і зовнішніх просторів назв для всіх проектів сеансу, разом з вбудованими функціями та змінними кожного з цих класів:


[[Image:kdevelop-17.png|thumb|600px|center]]
[[Image:kdevelop-17.png|thumb|600px|center]]


Hovering over an entry provides again information about the symbol, its location of declaration and definition, and its uses. Double-clicking on an entry in this tree view opens an editor window at the location where the symbol is declared or defined.
Знову ж таки, за допомогою наведення вказівника миші на запис у списку можна отримати дані щодо відповідного символу, розташування його оголошення та визначення і випадків використання. Подвійним клацанням на пункті цього ієрархічного списку можна відкрити вікно редактора на позиції, де оголошено або визначено символ.


But there are other ways of looking at global information. For example, the '''Documents''' tool provides a view of a project in terms of the kinds of files or other documents this project is comprised of:
Але ви можете скористатися і іншими способами перегляду загальних даних. Наприклад, за допомогою інструмента <menuchoice>Документи</menuchoice> можна поглянути на проект з точки зору типів файлів або інших документів, з яких складається проект:


[[Image:kdevelop-18.png|thumb|600px|center]]
[[Image:kdevelop-18.png|thumb|600px|center]]
==== Пояснення щодо кольорів підсвічування ====
У '''KDevelop''' для підсвічування об’єктів у коді використовується ціла палітра кольорів. Якщо вам відоме значення цих кольорів, ви можете дуже швидко отримати доволі багато інформації щодо коду, просто подивившись на кольори, навіть не розбираючи кожен із символів коду окремо. Використано такі правила підсвічування:
* Об’єкти типів Class / Struct, Enum (значенні і тип), (загальні) функції та учасники класів буде позначено власним кольором (класи — зеленим, переліки (enum) — темно-червоним, а учасники — темно-жовтим або фіолетовим, (загальні) функції — завжди фіолетовим).
* Всі загальні змінні буде позначено темно-зеленим кольором.
* Ідентифікатори, які є визначеннями інших типів, буде позначено синьо-зеленим кольором.
* Всі оголошення та визначення об’єктів буде позначено напівжирним шрифтом.
* Якщо доступ до учасника класу здійснюється з контексту його визначення (базового або похідного класу), запису буде позначено жовтим кольором. Якщо ж доступ здійснюється поза цим контекстом, запису буде позначено фіолетовим кольором.
* Якщо учасник позначено як закритий (private) або захищений (protected), колір запису буде трохи темнішим ніж зазвичай.
* Для локальних для вмісту функції змінних кольори вибиратимуться на основі хеш-коду ідентифікатора. Це ж стосується і параметрів функції. Ідентифікатор завжди матиме той самий колір у межах простору своєї дії, але той самий ідентифікатор матиме інший колір, якщо позначатиме інший об’єкт, тобто якщо його буде перевизначено на вкладеному рівні, отже ви зазвичай бачитимете для назви одного ідентифікатора у різних просторах однаковий колір. Отже, якщо у коді є декілька функцій, що приймають параметри з однаковими назвами, параметри цих функцій матимуть однаковий колір. Таке розфарбовування може бути окремо вимкнено за допомогою сторінки кольорів у діалоговому вікні параметрів програми.
* Ідентифікатори, для яких '''KDevelop''' не може визначити відповідне оголошення, буде позначено білим кольором. Таке позначення часто буває спричинено пропущеними інструкціями <code>#include</code>.
* Крім описано вище розфарбування, буде застосовано звичайні правила підсвічування синтаксичних конструкцій, визначені у ''Kate'''. Якщо виникатимуть конфлікти з підсвічуванням текстового редактора, завжди використовуватиметься семантичне підсвічування '''KDevelop'''.
{{Note_(uk)|Розфарбовування локальних змінних можна вимкнути за допомогою пункту <menuchoice>Параметри...->Налаштувати KDevelop...->Підтримка мов->Інтенсивність локального розфарбовування</menuchoice>, пересунувши відповідний повзунок до мінімального значення. Так само, розфарбовування загальних змінних, загальний функцій, класів, структур, переліків та членів класу можна вимкнути за допомогою пункту <menuchoice>Параметри...->Налаштувати KDevelop...->Підтримка мов->Інтенсивність загального розфарбовування</menuchoice> }}
<span id="Navigating in source code"></span>
<span id="Navigating in source code"></span>
=== Пересування між фрагментами коду ===
=== Пересування між фрагментами коду ===


In the previous section, we have discussed exploring source code, i.e. getting information about symbols, files and projects. The next step is then to jump around your source base, i.e. to navigate in it. There are again various levels at which this is possible: local, within a file, and within a project.
У попередньому розділі ми обговорювали вивчення коду програми, тобто отримання даних щодо символів, файлів та проектів. Наступним кроком є перехід між компонентами коду, тобто навігація кодом. Знову ж таки, існує декілька рівнів, на яких можна здійснювати подібну навігацію: локально, у межах файла і у межах проекту.


{{Note|1=Many of the ways to navigate through code are accessible from the <menuchoice>Navigate</menuchoice> menu in the '''KDevelop''' main window.}}
{{Note_(uk)|1=Доступ до багатьох засобів навігації можна отримати за допомогою меню <menuchoice>Навігація</menuchoice> головного вікна '''KDevelop'''.}}


==== Пересування поточним фрагментом ====
==== Пересування поточним фрагментом ====


'''KDevelop''' is much more than an editor, but it is ''also'' a source editor. As such, you can of course move the cursor up, down, left or right in a source file. You can also use the <keycap>PageUp</keycap> and <keycap>PageDown</keycap> keys, and all the other commands you are used from any useful editor.
'''KDevelop''' — набагато більше, ніж просто редактор, — це ''також'' редактор коду. Тому, звичайно ж, ви можете пересувати курсор текстом за допомогою звичайних клавіш зі стрілочками. Ви також можете скористатися натисканням клавіш <keycap>PageUp</keycap> та <keycap>PageDown</keycap> і всіма іншими командами, якими можна скористатися у звичайному текстовому редакторі.


==== Пересування файлами та режим огляду ====
==== Пересування файлами та режим огляду ====


At the file scope, '''KDevelop''' offers many possible ways to navigate through source code. For example:
На рівні окремого файла у '''KDevelop''' передбачено багато способів навігації кодом програми. Приклад:


* '''Outline''': You can get an outline of what's in the current file in at least three different ways:
* '''Огляд''': відкрити панель з оглядом вмісту поточного файла можна у принаймні три різних способи:
** Clicking into the <menuchoice>Outline</menuchoice> textbox at the top right of the main window, or hitting <keycap>Alt + Ctrl + N</keycap> opens a drop-down menu that lists all function and class declarations: [[image:kdevelop-19.png|thumb|600px|center]] You can then just select which one to jump to, or &mdash; if there are a lot &mdash; start typing any text that may appear in the names shown; in that case, as you keep typing, the list becomes smaller and smaller as names are removed that don't match the text already typed until you are ready to select one of the choices.
** Натисканням кнопки <menuchoice>Огляд</menuchoice> у верхній правій частині головного вікна або натисканням комбінації клавіш <keycap>Alt + Ctrl + N</keycap>. У відповідь буде відкрито спадне меню зі списком всіх функцій та оголошень класів: [[Image:kdevelop-19.png|thumb|600px|center]] Після цього ви можете вибрати пункт, до якого слід перейти, або — якщо таких пунктів багато, — почніть вводити текст, який може бути частиною потрібного пункту. У такому разі, введення символів у текстове поле скорочуватиме список, оскільки з нього виключатимуться пункти, які не відповідають введеним вами даним, доки список не буде скорочено до прийнятних розмірів.
** Positioning the cursor at file scope (i.e. outside any function or class declarations or definitions) and having the '''Code Browser''' tool open: [[image:kdevelop-16.png|thumb|600px|center]] This also provides you an outline of what is happening in the current file, and allows you to select where you want to jump to.
** Розташуванням курсора у області файла (тобто поза межами оголошень та визначень функцій або класів) з відкритою панеллю інструмента '''Перегляд коду''': [[Image:kdevelop-16.png|thumb|600px|center]] За показаною панеллю ви зможете стежити з даними поточного файла і надасть вам змогу вибрати пункт, до якого ви хочете перейти.
** Hovering the mouse over the tab for one of the open files also yields an outline of the file in that tab.
** Наведенням вказівника миші на вкладку одного з відкритих файлів. У відповідь буде показано панель з оглядом даних файла у відповідній вкладці.


* Source files are organized as a list of function declarations or definitions. Hitting <keycap>Alt + Ctrl + PgUp</keycap> and <keycap>Alt + Ctrl + PgDown</keycap> jumps to the previous or next function definition in this file.
* Файли коду впорядковано у список оголошень та визначень. За допомогою натискання комбінацій клавіш <keycap>Alt + Ctrl + PgUp</keycap> і <keycap>Alt + Ctrl + PgDown</keycap> можна переходити до визначення попередньої або наступної функції у файлі.


==== Пересування проектами та сеансами: семантичне пересування ====
==== Пересування проектами та сеансами: семантичне пересування ====


As mentioned in other places, KDevelop does not usually consider individual source files but rather looks at projects as a whole (or, rather, at all projects that are part of the current session). As a consequence, it offers many possibilities for navigating through entire projects. Some of these are derived from what we have already discussed in the section on [[Special:myLanguage/KDevelop4/Manual/Working with source code#Exploring source code|Exploring source code]] while others are genuinely different. The common theme is that these navigation features are based on a ''semantic understanding'' of the code, i.e. they offer you something that requires parsing entire projects and connecting data. The following list shows some ways how to navigate through source code that is scattered throughout a potentially very large number of files:
Як ми вже згадували раніше, зазвичай '''KDevelop''' не працює з окремими файлами коду, замість цього середовище працює з цілими проектами (або, точніше, з усіма проектами, які є частиною поточного сеансу). Внаслідок цього середовище надає можливість навігації у межах цілих проектів. Частина цих можливостей є наслідком можливостей, які ми вже обговорювали у розділі щодо [[Special:myLanguage/KDevelop4/Manual/Working with source code#Exploring source code|навігації кодом]], інші ж є абсолютно відмінними від них. Основною особливістю цих можливостей навігації є те, що їх засновано на ''семантичному розумінні'' коду, тобто для роботи з ними потрібна певна обробка цілих проектів та пов’язаних з ними даних. У наведеному нижче списку показано декілька способів навігації кодом, який може зберігатися у великій кількості окремих файлів:


* As seen in the section on [[Special:myLanguage/KDevelop4/Manual/Working with source code#Exploring source code|Exploring source code]], you can get a tooltip explaining individual namespace, class, function or variable names by hovering your mouse over it or keeping the <keycap>Alt</keycap> key pressed for a while. Here is an example: [[Image:kdevelop-14.png|thumb|500px|center]] Clicking on the links for the declaration of a symbol or expanding the list of uses allows you to jump to these locations, if necessary opening the respective file and placing the cursor at the corresponding location. A similar effect can be achieved by using the '''Code Browser''' tool view also discussed previously.
* Як ми вже бачили з розділу щодо [[Special:myLanguage/KDevelop4/Manual/Working with source code#Exploring source code|навігації кодом]], ви можете отримати панель з поясненнями щодо окремого простору назв, класу, функції або змінної наведенням вказівника миші на відповідний запис у коді або утримуванням натиснутою клавіші <keycap>Alt</keycap>. Ось приклад: [[Image:kdevelop-14.png|thumb|500px|center]] Натискання посилань на оголошення символу або розгортання списку використань надає вам змогу перейти до відповідних місць коду. Подібного ефекту можна досягти за допомогою панелі перегляду '''Перегляд коду''', яку ми вже обговорювали.


* '''Quick open''': A very powerful way of jumping to other files or locations is to use the various ''quick open'' methods in '''KDevelop'''. There are four versions of these:
* '''Швидке відкриття''': дуже потужним способом пересування файлами у '''KDevelop''' є різноманітні інструменти ''швидкого відкриття''. Передбачено чотири різновиди таких інструментів:
** '''Quick open class''' (<menuchoice>Navigate -> Quick open class</menuchoice> or <keycap>Alt + Ctrl + C</keycap>): You will get a list of all classes in this session. Start typing (a part of) the name of a class and the list will continue to whittle down to only those that actually match what you've typed so far. If the list is short enough, select an element using the up and down keys and '''KDevelop''' will get you to the place where the class is declared.
** '''Швидке відкриття класу''' (<menuchoice>Навігація -> Швидко відкрити клас</menuchoice> або <keycap>Alt + Ctrl + C</keycap>): вам буде показано список всіх класів у поточному сеансі. Почніть вводити (частину) назви класу, і середовище скоротить список до назв, які відповідають введеній частині. Коли список стане достатньо коротким, просто виберіть у ньому елемент за допомогою клавіш зі стрілками вгору і вниз, а '''KDevelop''' відкриє місце у коді, де клас було оголошено.
** '''Quick open function''' (<menuchoice>Navigate -> Quick open function</menuchoice> or <keycap>Alt + Ctrl + M</keycap>): You will get a list of all (member) functions that are part of the projects in the current session, and you can select from it in the same way as above. Note that this list may include both function declarations and definitions.
** '''Швидке відкриття функції''' (<menuchoice>Навігація -> Швидко відкрити функцію</menuchoice> або <keycap>Alt + Ctrl + M</keycap>): вам буде показано список всіх (вбудованих) функцій, які є частиною проектів у поточному сеансі, вибрати потрібну вам функцію можна у той самий спосіб, у який вибирається клас. Зауважте, що у списку можуть бути одразу пункти оголошення та визначення функцій.
** '''Quick open file''' (<menuchoice>Navigate -> Quick open file</menuchoice> or <keycap>Alt + Ctrl + O</keycap>): You will get a list of all files that are part of the projects in the current session, and you can select from it in the same way as above.
** '''Швидке відкриття файла''' (<menuchoice>Навігація -> Швидко відкрити файл</menuchoice> або <keycap>Alt + Ctrl + O</keycap>): вам буде показано список всіх файлів, які є частиною проектів поточного сеансу, вибрати потрібний можна буде  у описаний вище спосіб.
** '''Universal quick open''' (<menuchoice>Navigate -> Quick open</menuchoice> or <keycap>Alt + Ctrl + Q</keycap>): If you forget which key combination is bound to which of the above commands, this is the universal swiss army knife &mdash; it simply presents you with a combined list of all files, functions, classes, and other things from which you can select.
** '''Універсальне швидке відкриття''' (<menuchoice>Навігація -> Швидко відкрити</menuchoice> або <keycap>Alt + Ctrl + Q</keycap>): якщо ви забули, які комбінації клавіш пов’язано з описаними вище командами, це універсальний спосіб: вам буде показано список всіх файлів, функцій, класів та інших частин проектів, з якого ви зможете вибрати потрібний вам пункт.


* '''Jump to declaration/definition''': When implementing a (member) function, one often needs to switch back to the point where a function is declared, for example to keep the list of function arguments synchronised between declaration and definition, or to update the documentation. To do so, place the cursor onto the function name and select <menuchoice>Navigation -> Jump to declaration</menuchoice> (or hit <keycap>Ctrl + .</keycap>) to get to the place where the function is declared. There are multiple ways to get back to the original place:
* '''Перехід до оголошення або визначення''': під час реалізації функції часто виникає потреба у переході до місця, де цю функцію оголошено, наприклад, для синхронізації списку аргументів між оголошенням і визначенням або для оновлення документації. Виконати такий перехід можна розташуванням курсора на назві функції з наступним вибором пункту меню <menuchoice>Навігація -> Перейти до оголошення</menuchoice> (або натисканням комбінації клавіш <keycap>Ctrl + .</keycap>). Повернутися до визначення можна у декілька способів:
** Selecting <menuchoice>Navigation -> Jump to definition</menuchoice> (or hitting <keycap>Ctrl + ,</keycap>).
** За допомогою пункту меню <menuchoice>Навігація -> Перейти до визначення</menuchoice> (або натискання комбінації клавіш <keycap>Ctrl + ,</keycap>).
** Selecting <menuchoice>Navigation -> Previous visited context</menuchoice> (or hit <keycap>Meta + Left</keycap>), as described below.
** За допомогою пункту меню <menuchoice>Навігація -> Попередній переглянути контекст</menuchoice> (або натискання комбінації клавіш <keycap>Meta + Стрілка ліворуч</keycap>), як це описано далі.


{{Note|1=Jumping to the declaration of a symbol is something that does not only work when placing the cursor on the name of the function you are currently implementing. Rather, it also works for other symbols: Putting the cursor on a (local, global, or member) variable and jumping to its declaration also transports you to its location of declaration. Similarly, you can place the cursor on the name of a class, for example in a variable of function declaration, and jump to the location of its declaration.}}
{{Note_(uk)|1=Перехід до оголошення символу не обмежується лише функціями, які ви реалізуєте. Цей спосіб працює і у разі розташування курсора на назві (локальної, загальної чи вбудованої) змінної: вибір відповідного пункту меню призведе до пересування області перегляду до оголошення символу. Отже ви можете, наприклад, розташувати курсор на назві класу у оголошенні змінної функції і перейти до оголошення цього класу.}}


* '''Switch between declaration/definition''': In the example above, to jump to the site of the declaration of the current function, you need to first place the cursor on the function name. To avoid this step, you can select <menuchoice>Navigation -> Switch definition/declaration</menuchoice> (or hit <keycap>Shift + Ctrl + C</keycap>) to jump to the declaration of the function within which the cursor currently is. Selecting the same menu entry a second time transports you back to the place where the function is defined.
* '''Перемкнути визначення/оголошення''': у наведеному вище прикладі для переходу до місця оголошення поточної функції нам потрібно було спочатку розташувати курсор на назві функції. Якщо вам не хочеться цього робити, скористайтеся пунктом меню <menuchoice>Навігація -> Перемкнути визначення/оголошення</menuchoice> (або натисніть комбінацію клавіш <keycap>Shift + Ctrl + C</keycap>), щоб перейти до оголошення функції, у якій перебуває курсор. Повторний вибір цього пункту меню поверне курсор назад до визначення функції.


* '''Previous/Next use''': Placing the cursor on the name of a local variable and selecting <menuchoice>Navigation -> Next use</menuchoice> (or hitting <keycap>Meta + Shift + Right</keycap>) transports you to the next use of this variable in the code. (Note that this doesn't just search for the next occurrence of the variable name but in fact takes into account that variables with the same name but in different scopes are different.) The same works for the use of function names. Selecting <menuchoice>Navigation -> Previous use</menuchoice> (or hitting <keycap>Meta + Shift + Left</keycap>) transports you to the previous use of a symbol.
* '''Попереднє/ Наступне використання''': розташування курсора на назві локальної змінної з наступним вибором пункту меню <menuchoice>Навігація -> Наступне використання</menuchoice> (або натискання комбінації клавіш <keycap>Meta + Shift + Стрілка праворуч</keycap>) переведе вас до наступного використання цієї змінної у коді. Зауважте, що буде виконано не лише пошук наступного використання назви змінної, але і взято до уваги і те, що змінні з тією самою назвою, але у інших просторах назв, є іншими. Те саме стосується і назв функцій. Вибір пункту <menuchoice>Навігація -> Попереднє використання</menuchoice> (або натискання комбінації клавіш <keycap>Meta + Shift + Стрілка ліворуч</keycap>) переведе перегляд до попереднього використання символу.


{{Note|1=To see the list of all uses of a name through which these commands cycle, place the cursor onto it and open the '''Code Browser''' tool view or press and hold the <keycap>Alt</keycap> button. This is explained in more detail in the section on [[Special:myLanguage/KDevelop4/Manual/Working_with_source_code#File_scope_information|Exploring code]].}}
{{Note_(uk)|1=Щоб переглянути список всіх використань назв, якими здійснюватиметься циклічний перехід внаслідок використання цієї команди, розташуйте курсор на назві символу і відкрийте панель <menuchoice>Перегляд коду</menuchoice> або натисніть і утримуйте клавішу <keycap>Alt</keycap>. Докладніше про використання цього прийому можна дізнатися з розділу щодо [[Special:myLanguage/KDevelop4/Manual/Working_with_source_code#File_scope_information|навігації кодом]].}}


* The '''context list''': Web browsers have this feature where you can go backward and forward in the list of most recently visited web pages. '''KDevelop''' has the same kind of features, except that instead of web pages you visit ''contexts''. A context is the current location of the cursor, and you change it by navigating away from it using anything but cursor commands &mdash; for example, by clicking on a location provided by a tooltip, in the '''Code Browser''' tool view, one of the options given in the <menuchoice>Navigation</menuchoice> menu, or any other navigation command. Using the <menuchoice>Navigation -> Previous Visited Context</menuchoice> (<keycap>Meta + Left</keycap>) and <menuchoice>Navigation -> Next Visited Context</menuchoice> (<keycap>Meta + Right</keycap>) transports you along this list of visited contexts just like the <menuchoice>back</menuchoice> and <menuchoice>forward</menuchoice> buttons of a browser transports you to the previous or next webpage in the list of visited pages.
{{Note_(uk)|Деякі із комбінацій клавіш вже може бути використано у вашій програмі для керування файлами (наприклад <keycap>Meta + стрілк ліворуч</keycap> використовується у LXDE/Openbox); ви можете або змінити комбінацію клавіш для скорочення у kdevelop за допомогою пункту меню <menuchoice>Параметри...->Налаштувати скорочення</menuchoice>, або змінити налаштування засобу керування вікнами (наприклад, змінити .config/openbox/lubuntu-rc.xml)}}


* Finally, there are tool views that allow you to navigate to different places in your code base. For example, the '''Classes''' tool provides you with a list of all namespaces and classes in all projects of the current session, and allows you to expand it to see member functions and variables of each of these classes: [[Image:kdevelop-17.png|thumb|500px|center]] Double-clicking on an item (or going through the context menu using the right mouse button) allows you to jump to the location of the declaration of the item. Other tools allow similar things; for example, the '''Projects''' tool view provides a list of files that are part of a session: [[image:kdevelop-13.png|thumb|500px|center]] Again, double-clicking on a file opens it.
* '''Список контекстів''': у переглядачах сторінок інтернету передбачено цю можливість, — ви можете пересуватися вперед і назад списком нещодавно відвіданих сторінок. У '''KDevelop''' теж є така можливість, але замість сторінок ви пересуваєтеся ''контекстами''. Контекст — це поточне розташування курсора, перехід до якого або з якого було здійснено за допомогою будь-яких дій, окрім натискання клавіші зі стрілками на клавіатурі (наприклад, натискання пункту на панелі підказки, панелі <menuchoice>Перегляд коду</menuchoice>, одного з пунктів меню <menuchoice>Навігація</menuchoice> або використання будь-якої іншої команди навігації). За допомогою пунктів меню <menuchoice>Навігація -> Попередній переглянути контекст</menuchoice> (<keycap>Meta + Стрілка ліворуч</keycap>) та <menuchoice>Навігація -> Наступний переглянутий контекст</menuchoice> (<keycap>Meta + Стрілка праворуч</keycap>) ви можете пересуватися списком відвіданих контекстів подібно до того, як за допомогою пунктів <menuchoice>назад</menuchoice> і <menuchoice>вперед</menuchoice> ви можете пересуватися між сторінками, відвіданими за допомогою програми для перегляду інтернету.
 
* Нарешті, ви можете скористатися панелями інструментів, за допомогою яких можна переходити до різних місць у коді. Наприклад, за допомогою інструмента '''Класи''' ви можете користуватися списком всіх просторів назв та класів у всіх проектах поточного сеансу. Ви можете розгортати пункти списку для перегляду списків вбудованих функцій та змінних кожного з класів: [[Image:kdevelop-17.png|thumb|500px|center]] Подвійне клацання на пункті (або використання відповідного пункту контекстного меню, яке можна відкрити клацанням правою кнопкою миші) надасть вам змогу перейти до місця оголошення пункту. На інших панелях інструментів можна скористатися подібними ж прийомами, наприклад, на панелі <menuchoice>Проекти</menuchoice> буде наведено список частин сеансу: [[Image:kdevelop-13.png|thumb|500px|center]] Знову ж таки, подвійне клацання на пункті файла призведе до його відкриття.




Line 159: Line 186:
</syntaxhighlight>}}<!--{-->
</syntaxhighlight>}}<!--{-->


In the last line, '''KDevelop''' will remember that the variable <code>my_ride</code> is of type <code>Car</code>, and will automatically offer to complete the name of the member function <code>ge</code> as <code>get_color</code>. In fact, all you have to do is to keep typing until the auto-completion feature has reduced the number of matches to one, and then hit the <keycap>Enter</keycap> key:
У останньому рядку '''KDevelop''' запам’ятає, що змінна <code>my_ride</code> належить до типу <code>Car</code> і буде автоматично пропонувати доповнення назви вбудованої функції <code>ge</code> у форматі <code>get_color</code>. Фактично, вам достатньо вводити назву, аж доки список знайдених відповідників не починатиметься з потрібного вам виразу, а потім натиснути клавішу <keycap>Enter</keycap>:


[[Image:kdevelop-42.png|thumb|500px|center]]
[[Image:kdevelop-42.png|thumb|500px|center]]


Note that you can click on the tool-tip to get more information about the function apart from its return type and whether it is public:
Зауважте, що ви можете клацнути на панелі підказки, щоб отримати більше даних щодо функції, окрім типу даних, які вона повертає, і те, чи є ця функція відкритою (public):


[[Image:kdevelop-43.png|thumb|500px|center]]
[[Image:kdevelop-43.png|thumb|500px|center]]


Auto-completion can save you a lot of typing if your project uses long variable and function names; furthermore, it avoids mis-spelling names (and the resulting compiler errors) and it makes it much simpler to remember the exact names of functions; for example, if all of your getters start with <code>get_</code>, then the auto-completion feature will be able to only present you a list of possible getters when you have typed the first four letters, likely reminding you in the process which of the functions is the correct one. Note that for auto-completion to work, neither the declaration of the <code>Car</code> class nor of the <code>my_ride</code> variable need to be in the same file as where you are currently writing code. '''KDevelop''' simply has to know that these classes and variables are connected, i.e. the files in which these connections are made need to be part of the project you are currently working on.
Автоматичне доповнення може значно скоротити витрату часу на введення даних, якщо у вашому проекті використано змінні або функції з довгими назвами. Крім того, автоматичне доповнення допомагає запобігти друкарським помилкам у назвах (а отже помилкам під час збирання), за його допомогою простіше запам’ятати точні назви функцій. Наприклад, якщо назви всіх ваших функцій отримання даних починаються з <code>get_</code>, можливість автоматичного доповнення надасть вам змогу скористатися повним списком таких функцій, щойно ви наберете перші чотири літери назви, що, звичайно, допоможе вам згадати, яку з них ви мали намір використати. Зауважте, що для роботи з автоматичним доповненням не обов’язково, щоб оголошення класу <code>Car</code> та змінної <code>my_ride</code> перебували у одному файлі, над яким ви зараз працюєте. '''KDevelop''' просто має знати, що ці клас і змінну пов’язано, тобто файли, у яких зберігається код цих елементів програми, мають бути частиною проекту, над яким ви працюєте.
 
{{Note_(uk)|1='''KDevelop''' не завжди може здогадатися, коли слід допомогти вам автоматичним доповненням коду. Якщо підказку автоматичного доповнення не було відкрито автоматично, натисніть комбінацію клавіш <keycap>Ctrl + Пробіл</keycap>, щоб відкрити список варіантів вручну. Загалом же, для того, щоб можна було скористатися автоматичним доповненням, '''KDevelop''' має обробити файли коду вашого проекту. Цю дію буде виконано у фоновому режимі для всіх файлів, які є частиною проектів поточного сеансу після запуску '''KDevelop''', а також після того, як ви припините вводити дані на частку секунди (тривалість паузи можна змінити).}}


{{Note|1='''KDevelop''' doesn't always know when to assist you in completing code. If the auto-completion tooltip doesn't automatically open, hit <keycap>Ctrl + Space</keycap> to open a list of completions manually. In general, in order for auto-completion to work, '''KDevelop''' needs to parse your source files. This happens in the background for all files that are part of the projects of the current session after you start '''KDevelop''', as well as while after you stop typing for a fraction of a second (the delay can be configured).}}
{{Note_(uk)|1='''KDevelop''' виконує обробку лише тих файлів, які є файлами коду програми, відповідно до типу MIME файла. Цей тип не встановлюється до першого збереження файла. Отже створення нового файла і введення коду до цього файла не увімкне автоматичної обробки файла для використання даних з метою автоматичного доповнення. Щоб увімкнути обробку, файл доведеться зберегти.}}


{{Note|1='''KDevelop''' only parses files that it considers source code, as determined by the MIME-type of the file. This type isn't set before the first time a file is saved; consequently, creating a new file and starting to write code in it will not trigger parsing for auto-completion until after it is saved for the first time.
{{Note_(uk)|1=Для того, щоб можна було скористатися автоматичним доповненням, '''KDevelop''' повинен мати доступ до файлів заголовків. Середовище виконає пошук цих файлів у декількох типових теках. Якщо файл заголовка не вдасться знайти автоматично, його пункт у списку буде підкреслено червоною лінією. У такому разі вам слід клацнути на цьому пункті правою кнопкою миші і повідомити '''KDevelop''' явним чином, де слід шукати цей файл та дані, які у ньому зберігаються.}}


That said, this does not mean that no auto-completions may be offered. For example, here... [[Image:kdevelop-20.png|thumb|450px|center]] ...'''KDevelop''''s built-in editor (Kate) simply offers one of the words it has previously seen in the current file for auto-completion. There is no syntactic context involved, however, as can be seen by the absence of the return type in the tooltip.}}
{{Note_(uk)|1=Налаштування автоматичного доповнення обговорено у [[KDevelop4/Manual/Customizing_KDevelop#Customizing_code_auto-completion|іншому розділі цього підручника]].}}


==== Додавання нових класів та реалізація вкладених функцій ====
==== Додавання нових класів та реалізація вкладених функцій ====


'''KDevelop''' has a wizard for adding new classes. To add a new class, select <menuchoice>Code -> Create New Class</menuchoice> to get the following dialog box:
У '''KDevelop''' передбачено допоміжну програму для додавання нових класів. Її роботу описано у розділі [[Special:myLanguage/KDevelop4/Manual/Code generation with templates#Creating a new class|Створення класу]]. Простий клас C++ можна створити за допомогою основного шаблона C++ з категорії <tt>Клас</tt>. У допоміжній програмі ви можете вибрати попередні функції-елементи, наприклад порожній конструктор, конструктор копіювання та деструктор.  
 
[[Image:kdevelop-27.png|thumb|400px|center]]
 
Here, we have entered the new class's name <code>Bus</code> (you can also enter here which other classes this class should be derived from). The next page of the dialog allows us to select the standard member functions we will need:
 
[[Image:kdevelop-28.png|thumb|400px|center]]
 
Here, we want a default constructor, a copy constructor, and a destructor. After the following pages of the dialog that allow you to select a license header and the location for the new files, '''KDevelop''' will generate two new tabs with the header and source files:
 
[[Image:kdevelop-29.png|thumb|500px|center]]
 


The header file already has include guards and the new class has all the member functions we selected. The next two steps would be to document the class and its member functions and to implement them. We will discuss aids for documenting classes and functions below. To implement the special functions already added, simply go to the <menuchoice>bus.cpp</menuchoice> tab where the skeleton of functions are already provided:
Після завершення роботи допоміжної програми буде створено і відкрито у редакторі нові файли. Основу файла заголовків вже створено, а у новому класів є всі вибрані нами вбудовані функції. Наступними двома кроками мають бути документування класу та його вбудованих функцій та реалізація цих класів і функцій. Нижче ми обговоримо допоміжні засоби з документування класів і функцій. Щоб реалізувати спеціальні функції, які ми вже додали, просто перейдіть на вкладку <menuchoice>bus.cpp</menuchoice>, де вже є каркас наших функцій:


[[Image:kdevelop-30.png|thumb|500px|center]]
[[Image:kdevelop-30.png|thumb|500px|center]]


To add new member functions, go back to the <menuchoice>bus.h</menuchoice> tab and add the name of a function. For example, let us add this:
Щоб додати нові вкладені функції, поверніться на вкладку <menuchoice>bus.h</menuchoice> і додайте назву функції. Наприклад, можна додати таке:


[[Image:kdevelop-31.png|thumb|500px|center]]
[[Image:kdevelop-31.png|thumb|500px|center]]


Note how I have already started with the implementation. However, in many coding styles, the function shouldn't be implemented in the header file but rather in the corresponding .cpp file. To this end, locate the cursor on the name of the function and select <menuchoice>Code -> Move to source</menuchoice> or hit <keycap>Ctrl + Alt + S</keycap>. This remove the code between curly braces from the header file (and replaces it by a semicolon as necessary to terminate the function declaration) and moves it into the source file:
Зауважте, що реалізацію вже розпочато. Але у межах багатьох стилів програмування функції не слід реалізовувати у файлах заголовків, це слід робити у відповідних файлах .cpp. Для цього розташуйте курсор на назві функції і скористайтеся пунктом меню <menuchoice>Код -> Пересунути до коду</menuchoice> або натисніть комбінацію клавіш <keycap>Ctrl + Alt + S</keycap>. Код між фігурними дужками буде пересунуто з файла заголовків (його буде замінено на крапку з комою для завершення оголошення функції) до відповідного файла коду:


[[Image:kdevelop-32.png|thumb|500px|center]]
[[Image:kdevelop-32.png|thumb|500px|center]]


Note how I have just started typing and that I meant to imply that the <code>students</code> variable should probably be a member variable of class <code>Bus</code> but that I haven't yet added it. Note also how '''KDevelop''' underlines it to make clear that it doesn't know anything about the variable. But this problem can be solved: Clicking on the variable name yields the following tooltip:
Введення коду розпочато. Змінна <code>students</code> має, ймовірно, бути вбудованою змінною класу <code>Bus</code>, але її ще не додано до цього класу. '''KDevelop''' підкреслено цю змінну, щоб позначити те, що середовищу ще нічого не відомо про цю змінну. Цю проблему просто розв’язати: натискання назви змінної відкриє таку панель підказки:


[[Image:kdevelop-33.png|thumb|500px|center]]
[[Image:kdevelop-33.png|thumb|500px|center]]


(The same can be achieved by right clicking on it and selecting <menuchoice>Solve: Declare As</menuchoice>.) Let me select "3 - private unsigned int" (either by mouse, or by hitting <keycap>Alt + 3</keycap>) and then see how it comes out in the header file:
(Того самого результату можна досягти за допомогою пункту контекстного меню <menuchoice>Розв’язати: оголосити як</menuchoice>.) Давайте виберемо «3 - private unsigned int» (за допомогою миші або натискання комбінації клавіш <keycap>Alt + 3</keycap>). Ось що буде додано до файла заголовків:


[[Image:kdevelop-34.png|thumb|500px|center]]
[[Image:kdevelop-34.png|thumb|500px|center]]


It is worth noting that '''KDevelop''' extracts the type of the variable to be declared from the expression used to initialize it. For example, if we had written the addition in the following rather dubious way, it would had suggested to declare the variable as type <code>double</code>:
Варто зауважити, що '''KDevelop''' визначає тип змінної, яку слід оголосити, за виразом, використаним для її ініціалізації. Наприклад, якщо було використано додавання у такому доволі безсумнівному форматі, середовище запропонує тип змінної <code>double</code>:


[[Image:kdevelop-35.png|thumb|500px|center]]
[[Image:kdevelop-35.png|thumb|500px|center]]


As a final point: The method using <menuchoice>Code -> Move to source</menuchoice> does not always insert the new member function where you may want it. For example, you may want it to be marked as <code>inline</code> and place it at the bottom of the header file. In a case like this, write the declaration and the start writing the definition of the function like this:
Нарешті, метод використання пункту меню <menuchoice>Код -> Пересунути до коду</menuchoice> не завжди призводить до вставляння вбудованої функції до бажаного місця у коді. Наприклад, вам може бути потрібним визначення коду як <code>inline</code> і розташування його у нижній частині файла заголовків. У такому разі вкажіть оголошення і почніть введення визначення функції ось так:


[[Image:kdevelop-36.png|thumb|500px|center]]
[[Image:kdevelop-36.png|thumb|500px|center]]


'''KDevelop''' automatically offers all possible completions of what might come here. Selecting one of the two <code>add_students</code> entries yields the following code that already fills in the complete argument list:
'''KDevelop''' автоматично пропонує всіх можливі варіанти доповнення. Вибір одного з двох записів <code>add_students</code> призведе до створення такого коду, у якому вже буде заповнено список параметрів:


[[Image:kdevelop-37.png|thumb|500px|center]]
[[Image:kdevelop-37.png|thumb|500px|center]]
{{Note|1=The fact that the tooltip shows the same function twice is fixed in '''KDevelop''' 4.2.2 and later.}}
{{Note|1=In the example, accepting one of the choices the auto-completion tool offers yields the correct signature but unfortunately deletes the <code>inline</code> marker already written. This has been reported as [https://bugs.kde.org/show_bug.cgi?id=274244 KDevelop Bug 274245].}}


==== Оголошення для документування ====
==== Оголошення для документування ====


Good code is well documented, both at the level of the implementation of algorithms within in functions as well as at the level of the interface &mdash; i.e., classes, (member and global) functions, and (member or global) variables need to be documented to explain their intent, possible values of arguments, pre- and postconditions, etc. As far as documenting the interface is concerned, [http://www.doxygen.org doxygen] has become the de facto standard for formatting comments that can then be extracted and displayed on searchable webpages.
Хороший код завжди добре документовано, як на рівні реалізації алгоритмів у функціях, так і на рівні інтерфейсу, — тобто класи (вбудовані і загальні) функції та (вбудовані і загальні) змінні слід документувати, щоб всім було зрозумілим їхнє призначення, можливі значення аргументів, попередні та остаточні умови тощо. У документуванні інтерфейсів фактичним стандартом є формат коментарів [http://www.doxygen.org doxygen], дані його можна видобути і показати на придатних для пошуку інтернет-сторінках.


'''KDevelop''' supports this style of comments by providing a short cut to generate the framework of comments that document a class or member function. For example, assume you have already written this code:
У '''KDevelop''' передбачено підтримку коментарів у цьому форматі за допомогою скорочення для створення оболонки-коментаря, який документуватиме клас або вбудовану функцію. Наприклад, припустімо ви вже створили такий код:


{{Input|<syntaxhighlight lang="cpp">
{{Input|<syntaxhighlight lang="cpp">
Line 240: Line 253:
</syntaxhighlight>}}
</syntaxhighlight>}}


You now want to add documentation to both the class and the member function. To this end, move the cursor onto the first line and select <menuchoice>Code -> Document Declaration</menuchoice> or hit <keycap>Alt + Shift + D</keycap>. '''KDevelop''' will respond with the following:
Тепер нехай вам потрібно додати документацію для класу і вбудованої функції. Для цього пересуньте курсор на перший рядок коду і скористайтеся пунктом меню <menuchoice>Код -> Документувати оголошення</menuchoice> або натисніть комбінацію клавіш <keycap>Alt + Shift + D</keycap>. '''KDevelop''' відкриє таке діалогове вікно:


[[Image:kdevelop-23.png|thumb|550px|center]]
[[Image:kdevelop-23.png|thumb|550px|center]]


The cursor is already in the grayed out area for you to fill in the short description (after the doxygen keyword <code>@brief</code>) of this class. You can then continue to add documentation to this comment that gives a more detailed overview of what the class does:
Курсор вже перебуває у затіненій області, щоб ви могли ввести короткий опис (після ключового слова doxygen <code>@brief</code>) цього класу. Тепер ви можете продовжити додавати документацію до цього коментаря, який краще пояснюватиме призначення класу:


[[Image:kdevelop-24.png|thumb|550px|center]]
[[Image:kdevelop-24.png|thumb|550px|center]]


While the editor is inside the comment, the comment text is highlighted in green (the highlighting disappears once you move the cursor out of the comment). When you get to the end of a line, hit <keycap>Enter</keycap> and '''KDevelop''' will automatically start a new line that starts with an asterisk and place the cursor one character indented.
Доки редагування відбуватиметься у коментарі текст коментаря буде позначено зеленим кольором (колір буде знято, щойно ви виведете курсор за межі коментаря). Коли ви наприкінці рядка натиснете клавішу <keycap>Enter</keycap>, '''KDevelop''' автоматично додасть новий рядок, що починатиметься з зірочки та відступу у один символ.


Now let's document the member function, again by putting the cursor on the line of the declaration and selecting <menuchoice>Code -> Document Declaration</menuchoice> or hitting <keycap>Alt + Shift + D</keycap>:
Тепер виконаємо документування вбудованої функції. Знову розташуйте курсор на рядку оголошення і виберіть пункт меню <menuchoice>Код -> Документувати оголошення</menuchoice> або натисніть комбінацію клавіш <keycap>Alt + Shift + D</keycap>:


[[Image:kdevelop-25.png|thumb|550px|center]]
[[Image:kdevelop-25.png|thumb|550px|center]]


Again, '''KDevelop''' automatically generates the skeleton of a comment, including documentation for the function itself, as well as its return type. In the current case, the name of the function is pretty much self-explanatory, but oftentimes function arguments may not be and should be documented individually. To illustrate this, let's consider a slightly more interesting function and the comment '''KDevelop''' automatically generates:
Знову ж таки, '''KDevelop''' автоматично створить каркас коментаря разом з документації щодо самої функції, а також типом даних, які вона повертає. У нашому випадку назва функції доволі очевидно описує її призначення, але часто аргументи функції можуть бути доволі неочевидними, їх слід документувати окремо. Наприклад, розгяньмо трохи цікавішу функцію та коментар, який автоматично створить для неї '''KDevelop''':


[[Image:kdevelop-26.png|thumb|550px|center]]
[[Image:kdevelop-26.png|thumb|550px|center]]
Line 266: Line 279:
[[Image:kdevelop-38.png|thumb|550px|center]]
[[Image:kdevelop-38.png|thumb|550px|center]]


We then realize that we're unhappy with the name <code>remove_students</code> and would have rather called it, say, <code>throw_out_students</code>. We could do a search-replace for the name, but this has two drawbacks:
Нехай пізніше ми зрозуміємо, що назва <code>remove_students</code> є невдалою, і її варто назвати, скажімо, <code>throw_out_students</code>. Ви могли б виконати пошук з заміною назви функції, але у такого способу є два недоліки:


* The function may be used in more than one file.
* Функцію може бути використано у декількох файлах.


* We really only want to rename this function and not touch functions that may have the same name but are declared in other classes or namespaces.
* Нам потрібно перейменувати лише цю функцію і не чіпати функції, які можуть мати ту саму назву, але які оголошено у інших класах або просторах назв.


Both these problems can be solved by moving the cursor on any of the occurrences of the name of the function and selecting <menuchoice>Code -> Rename declaration</menuchoice> (or right clicking on the name and selecting <menuchoice>Rename Bus::remove_students</menuchoice>). This brings up a dialog box where you can enter the new name of the function and where you can also see all the places where the function is actually used:
Обидві ці проблеми можна розв’язати наведенням курсора на всі використання назви функції з наступним вибором пункту <menuchoice>Код -> Перейменувати оголошення</menuchoice> (або клацанням правою кнопкою миші на назві з вибором пункту <menuchoice>Перейменувати Bus::remove_students</menuchoice>). У відповідь буде відкрито діалогове вікно, за допомогою якого ви зможете ввести нову назву функції і переглянути всі місця, де використано функцію:


[[Image:kdevelop-39.png|thumb|550px|center]]
[[Image:kdevelop-39.png|thumb|550px|center]]
Line 278: Line 291:
==== Фрагменти коду ====
==== Фрагменти коду ====


Most projects have pieces of code that one frequently has to write in source code. Examples are: for compiler writers, a loop over all instructions; for user interface writers, checks that user input is valid and if not to open an error box; in the project of the author of these lines, it would be code of the kind
У більшості проектів зустрічаються фрагменти коду, які доводиться використовувати доволі часто. Приклади: інструкції компілятора, цикл для всіх інструкцій, для функцій запису інтерфейсу користувача перевірки введених користувачем даних без відкриття вікна повідомлення про помилку. У проекті автора цього підручника часто використовується такий різновид коду:


{{Input|<syntaxhighlight lang="cpp">
{{Input|<syntaxhighlight lang="cpp">
Line 287: Line 300:
</syntaxhighlight>}}
</syntaxhighlight>}}


Rather than typing this kind of text over and over again (with all the concomitant typos one introduces), the '''Snippets''' tool of '''KDevelop''' can help here. To this end, open the tool view (see [[Special:myLanguage/KDevelop4/Manual/Working with source code#Tools and views|Tools and views]] if the corresponding button isn't already on the perimeter of your window). Then click on the "Add repository" button (a slight misnomer &mdash; it allows you to create a named collection of snippets for source codes of a particular kind, e.g. C++ sources) and create an empty repository. Then click the button with the green <menuchoice>+</menuchoice> to add a snippet, to get a dialog like the following:
Замість введення таких фрагментів тексту раз за разом, що може призвести до супутніх друкарських помилок ви можете скористатися інструментом <menuchoice>Фрагменти</menuchoice> '''KDevelop'''. Для цього відкрийте панель інструментів (див. розділ [[Special:myLanguage/KDevelop4/Manual/Working with source code#Tools and views|Інструменти і панелі перегляду]], якщо відповідної кнопки ще немає на панелях навколо панелі редагування). Або скористайтеся меню <menuchoice>Вікно -> Панелі інструментів</menuchoice> і увімкніть показ панелі <menuchoice>Фрагменти</menuchoice>. Натисніть кнопку <menuchoice>Додати сховище</menuchoice> (трохи невдала назва: за допомогою цієї кнопки ви можете створити іменовану збірку фрагментів коду певного типу, наприклад, фрагментів коду C++) і створіть порожнє сховище. Потім натисніть кнопку {{Plus}}, щоб додати фрагмент і відкрити таке діалогове вікно:


[[Image:kdevelop-40.png|thumb|500px|center]]
[[Image:kdevelop-40.png|thumb|500px|center]]


{{Note|1=The name of a snippet may not have spaces or other special characters because it must look like a normal function or variable name (for reasons that will become clear in the next paragraph). If the name of the snippet does contain spaces, the <menuchoice>OK</menuchoice> button will become inactive without any further explanation. This has been reported as [https://bugs.kde.org/show_bug.cgi?id=274299 KDevelop bug 274299].}}
{{Note_(uk)|1=У назві фрагмента не повинно бути пробілів та інших спеціальних символів, оскільки такий фрагмент повинен мати назву, подібну до назви звичайної функції або змінної (причини цього викладено нижче). Якщо у назві фрагмента є пробіли, кнопка <menuchoice>Гаразд</menuchoice> буде неактивною без будь-яких пояснень. Цей недолік виправлено у нещодавніх версіях KDevelop, див. [https://bugs.kde.org/show_bug.cgi?id=274299 ваду KDevelop №274299].}}


To use a snippet so defined, when you are editing code, you can just type the name of the snippet like you would any other function or variable name. This name will become available for auto-completion &mdash; which means that there is no harm in using a long and descriptive name for a snippet such as the one above &mdash; and when you accept the suggestion of the auto-completion tooltip (for example by just hitting <keycap>Enter</keycap>), the already entered part of the snippets' name will be replaced by the full expansion of the snippet and will be properly indented:
Щоб скористатися таким чином визначеним фрагментом, вам слід просто почати вводити у коді його назву, як ви це робите для будь-яких інших функцій або змінних. Для введених літер буде відкрито панель автоматичного доповнення (це означає, що можна використовувати будь-які достатньо довгі для розрізнення назви фрагментів, зокрема назви, подібні до використаної нами), якщо ви виберете відповідний пункт фрагмента на панелі підказки автоматичного доповнення (наприклад, натисканням клавіші <keycap>Enter</keycap>), вже введену частину назви фрагмента буде замінено повним текстом фрагмента з відповідними відступами:


[[Image:kdevelop-41.png|thumb|500px|center]]
[[Image:kdevelop-41.png|thumb|500px|center]]


Note that for this to work, the '''Snippets''' tool view need not be open or visible: you only ever need the tool view to define new snippets. An alternative, if less convenient, way to expand a snippet is to simply click on it in the respective tool view.
Зауважте, що для користування фрагментами не потрібно тримати відкритою і видимою панель інструмента <menuchoice>Фрагменти</menuchoice>: цією панеллю слід користуватися, лише для визначення нових фрагментів. Іншим, але менш зручним, способом перегляду фрагментів є просте натискання його пункту на відповідній панелі інструмента.


{{Note|1=Snippets are much more powerful than just explained. For a full description of what you can do with them, see the [[Special:myLanguage/KDevelop4/Manual/Tool_list/Snippets|detailed documentation of the Snippets tool]].}}<span id="Modes and working sets"></span>
{{Note_(uk)|1=Фрагменти є набагато потужнішими, ніж було пояснено. Повний опис можливостей, які вони надають, ознайомтеся з [[Special:myLanguage/KDevelop4/Manual/Tool_list/Snippets|докладною документацією з інструмента «Фрагменти»]].}}<span id="Modes and working sets"></span>
=== Режими і робочі набори ===
=== Режими і робочі набори ===


[[Image:kdevelop4_noworkingset.png|thumb|300px|center]]
[[Image:kdevelop4_noworkingset.png|thumb|300px|center]]


If you've gotten this far, take a look at the upper right of the '''KDevelop''' main window: As shown in the picture, you will see that there are three '''modes''' '''KDevelop''' can be in: <menuchoice>Code</menuchoice> (the mode we discuss in the current chapter on working with source code), <menuchoice>Debug</menuchoice> (see [[Special:myLanguage/KDevelop4/Manual/Debugging programs|Debugging programs]]) and <menuchoice>Review</menuchoice> (see [[Special:myLanguage/KDevelop4/Manual/Working with version control systems|Working with version control systems]]).  
Якщо вже ви дочитали до цього місця, зверніть увагу на верхню праву частину головного вікна '''KDevelop''': як можна бачити з наведеного знімка, '''KDevelop''' може працювати у трьох '''режимах''': <menuchoice>Код</menuchoice> (роботу у цьому режимі ми обговорювали у поточному розділі, коли оглядали роботу з кодом), <menuchoice>Зневаджування</menuchoice> (див. [[Special:myLanguage/KDevelop4/Manual/Debugging programs|Зневаджування програм]]) та <menuchoice>Перегляд</menuchoice> (див. [[Special:myLanguage/KDevelop4/Manual/Working with version control systems|Робота з системами керування версіями]]).  


[[Image:kdevelop4_sessionsprojectsworkingsets.png|thumb|250px|center]]
[[Image:kdevelop4_sessionsprojectsworkingsets_uk.png|thumb|250px|center]]


Each mode has its own set of tools that are stacked around the perimeter, and each mode also has a ''working set'' of currently open files and documents. Furthermore, each such working set is associated with a current session, i.e. we have the relationship shown above. Note that the files in the working set come from the same session, but they may come from different projects that are part of the same session.
Для кожного з режимів передбачено власний набір інструментів, кнопки яких розташовано вздовж периметра вікна середовища, для кожного режиму передбачено власний ''робочий набір'' відкритих файлів і документів. Крім того, кожен такий робочий набір пов’язано з поточним сеансом, тобто маємо взаємозв’язок, подібний до показаного вище. Зауважте, що файли у робочому наборі є частиною одного сеансу, але можуть належати до різних проектів, які є частинами цього сеансу.


If you open '''KDevelop''' the first time, the working set is empty &mdash; there are no open files. But as you open files for editing (or debugging, or reviewing in the other modes) your working set grows. The fact that your working set is non-empty is indicated by a symbol in the tab, as shown below. You will notice that whenever you close '''KDevelop''' and later start it again, the working set is saved and restored, i.e. you get the same set of open files.
Якщо ви відкрили вікно '''KDevelop''' вперше, робочий набір буде порожнім, — ще не відкрито жодного файла. Але з відкриттям файлів для редагування (або зневаджування, перегляду у інших режимах) ваш робочий набір розширюватиметься. Той факт, що ваш робочий набір не є порожнім, буде показано символом на вкладці, подібно до символу на знімку, наведеному нижче. Кожного разу, коли ви завершуватимете роботу '''KDevelop''', а потім починатимете її знову, робочий набір буде зберігатися і відновлюватися, тобто ви працюватимете з одним набором відкритих файлів.


[[Image:kdevelop-10.png|thumb|300px|center]]
[[Image:kdevelop-10.png|thumb|300px|center]]


If you hover your mouse over the symbol for the working set, you get a tooltip that shows you which files are currently open in this working set (here: the <code>step-32.cc</code> and <code>step-1.cc</code> files). Clicking on the red minus sign closes the tab for the corresponding file. Maybe more importantly, clicking on the correspondingly named button allows you to '''close''' the entire working set at once (i.e. to close all currently open files). The point about closing a working set, however, is that it doesn't just close all files, it actually saves the working set and opens a new, still empty one. You can see this here:
Якщо ви наведете вказівник миші на символ робочого набору, середовище покаже вам список файлів, які відкрито у робочому наборі (у нашому прикладі список з файлів <code>step-32.cc</code> та <code>step-1.cc</code>). Натискання кнопки з червоним мінусом призведе до закриття вкладки відповідного файла. Натискання кнопки з відповідною назвою надасть вам змогу '''закрити''' весь робочий набір одразу (тобто закрити всі відкриті файли). Сенс цього пункту у тому, що за його допомогою можна не лише закрити всі файли, але і зберегти робочий набір, а також відкрити новий порожній файл. Ось як це виглядає:


[[Image:kdevelop-11.png|thumb|300px|center]]
[[Image:kdevelop-11.png|thumb|300px|center]]


Note the two symbols to the left of the three mode tabs (the heart and the unidentifiable symbol to its left). Each of these two symbols represents a saved working set, in addition to the currently open working set. If you hover your mouse over the heart symbol, you'll get something like this:
Зверніть увагу на дві піктограми ліворуч від трьох заголовків вкладок режимів (піктограму з сердечком та іншу піктограму лівіше). Кожній з цих піктограм відповідає збережений робочий набір, окрім вже відкритого робочого набору. Якщо ви наведете вказівник миші на піктограму з сердечком, ви побачите щось таке:


[[Image:kdevelop-12.png|thumb|600px|center]]
[[Image:kdevelop-12.png|thumb|600px|center]]


It shows you that the corresponding working set contains two files and their corresponding project names: <code>Makefile</code> and <code>changes.h</code>. Clicking <menuchoice>Load</menuchoice> will close and save the current working set (which as shown here has the files <code>tria.h</code> and <code>tria.cc</code> open) and instead open the selected working set. You can also permanently delete a working set, which removes it from the set of saved working sets.<span id="Some useful keyboard shortcuts"></span>
Середовище показує, що поточний робочий набір складається з двох файлів, та демонструє їхні назви: <code>Makefile</code> та <code>changes.h</code>. Натискання кнопки <menuchoice>Завантажити</menuchoice> призведе до закриття і збереження поточного робочого набору (який у нашому прикладі складається з файлів <code>tria.h</code> і <code>tria.cc</code>), після чого буде відкрито вибраний робочий набір. Крім того, ви можете назавжди вилучити робочий набір, тобто усунути його зі списку збережених робочих наборів.<span id="Some useful keyboard shortcuts"></span>
=== Деякі корисні клавіатурні скорочення ===
=== Деякі корисні клавіатурні скорочення ===


'''KDevelop's''' editor follows the standard keyboard shortcuts for all usual editing operations. However, it also supports a number of more advanced operations when editing source code, some of which are bound to particular key combinations. The following are frequently particularly helpful:
У редакторі '''KDevelop''' використано всі звичайні клавіатурні скорочення для дій з редагування. Крім того, у редакторі передбачено декілька додаткових дій, пов’язаних з редагуванням коду програм. Деякі з цих дій мають відповідні типові клавіатурні скорочення. Нижче наведено частину з корисних клавіатурних скорочень для дій:


{| border="1" cellspacing="0"
{| border="1" cellspacing="0"
!colspan="2"  style="background-color:#ffff99;" | Jumping around in code
!colspan="2"  style="background-color:#ffff99;" | Пересування кодом
|-
|-


|       <keycap>Ctrl+Alt+O</keycap>
| <keycap>Ctrl+Alt+O</keycap>
| Quick open file: enter part of a filename and select among all the files in the current session's projects' directory trees that match the string; the file will then be opened
| Пришвидшене відкриття файла: вкажіть частину назви файла і виберіть той з них у каталозі проектів поточного сеансу, який вам потрібен; цей файл і буде відкрито.
|-
|-


|       <keycap>Ctrl+Alt+C</keycap>
| <keycap>Ctrl+Alt+C</keycap>
| Quick open class: enter part of a class name and select among all class names that match; the cursor will then jump to the class declaration
| Пришвидшене відкриття класу: вкажіть частину назви класу і виберіть ту з назв класів, яка вам потрібна; курсор буде переведено до рядка оголошення класу.
|-
|-


|       <keycap>Ctrl+Alt+M</keycap>
| <keycap>Ctrl+Alt+M</keycap>
| Quick open function: enter part of a (member) function name and select among all names that match; note that the list shows both declarations and definitions and the cursor will then jump to the selected item
| Пришвидшене відкриття функції: вкажіть частину назви функції (частини класу) і виберіть з запропонованих варіантів той, який вам потрібен; зауважте, що у списку буде показано оголошення і визначення, а курсор буде переведено до вибраного вами пункту.
|-
|-


|       <keycap>Ctrl+Alt+Q</keycap>
| <keycap>Ctrl+Alt+Q</keycap>
| Universal quick open: type anything (file name, class name, function name) and get a list of anything that matches to select from
| Універсальне пришвидшення відкриття: вкажіть будь-які дані (назву файла, назву класу, назву функції), і вам буде показано список всіх частин проекту, які відповідають критерію пошуку.
|-
|-


| <keycap>Ctrl+Alt+N</keycap>
| <keycap>Ctrl+Alt+N</keycap>
|Outline: Provide a list of all things that are happening in this file, e.g. class declarations and function definitions
| Огляд: показує список всіх дій, які виконуються у файлі, наприклад, оголошень класів та визначень функцій.
|-
|-


| <keycap>Ctrl+,</keycap>
| <keycap>Ctrl+,</keycap>
|Jump to definition of a function if the cursor is currently on a function declaration
| Перейти до визначення функції, якщо курсор перебуває у місці її оголошення.
|-
|-


| <keycap>Ctrl+.</keycap>
| <keycap>Ctrl+.</keycap>
|Jump to declaration of a function or variable if the cursor is currently in a function definition
| Перейти до оголошення функції або змінної, якщо курсор перебуває у позиції визначення функції.
|-
|-


| <keycap>Ctrl+Alt+PageDown</keycap>
| <keycap>Ctrl+Alt+PageDown</keycap>
|Jump to next function
| Перейти до наступної функції
|-
|-


| <keycap>Ctrl+Alt+PageUp</keycap>
| <keycap>Ctrl+Alt+PageUp</keycap>
|Jump to previous function
| Перейти до попередньої функції
|-
|-


| <keycap>Ctrl+G</keycap>
| <keycap>Ctrl+G</keycap>
|Goto line
| Перейти до рядка


|-
|-
!colspan="2"  style="background-color:#ffff99;" | Searching and replacing
!colspan="2"  style="background-color:#ffff99;" | Пошук і заміна
|-
|-


| <keycap>Ctrl+F</keycap>
| <keycap>Ctrl+F</keycap>
|Find
| Знайти
|-
|-


| <keycap>F3</keycap>
| <keycap>F3</keycap>
|Find next
| Знайти далі
|-
|-


| <keycap>Ctrl+R</keycap>
| <keycap>Ctrl+R</keycap>
|Replace
| Замінити
|-
|-


| <keycap>Ctrl+Alt+F</keycap>
| <keycap>Ctrl+Alt+F</keycap>
|Find-Replace in multiple files
| Знайти і замінити у декількох файлах
|-
|-


!colspan="2"  style="background-color:#ffff99;" | Other things
!colspan="2"  style="background-color:#ffff99;" | Інші команди
|-
|-


| <keycap>Ctrl+_</keycap>
| <keycap>Ctrl+_</keycap>
|Collapse one level: remove this block from view, for example if you want to focus on the bigger picture within a function
| Згорнути один рівень: вилучити блок з перегляду, наприклад, якщо ви бажаєте зосередитися на загальнішій картині у функції.
|-
|-


| <keycap>Ctrl++</keycap>
| <keycap>Ctrl++</keycap>
|Expand one level: undo the collapsing
| Розгорнути один рівень: скасувати згортання.
|-
|-


| <keycap>Ctrl+D</keycap>
| <keycap>Ctrl+D</keycap>
|Comment out selected text or current line
| Зняти коментування з позначеного фрагмента тексту або поточного рядка.
|-
|-


| <keycap>Ctrl+Shift+D</keycap>
| <keycap>Ctrl+Shift+D</keycap>
|Comment in selected text or current line
| Додати позначки коментаря до позначеного тексту або поточного рядка.
|-
|-


| <keycap>Alt+Shift+D</keycap>     
| <keycap>Alt+Shift+D</keycap>     
|Document the current function. If the cursor is on a function or class declaration then hitting this key will create a doxygen-style comment pre-populated with a listing of all parameters, return values, etc.
| Документувати поточну функцію. Якщо курсор перебуває на оголошенні функції або класу, натискання цієї комбінації клавіш призведе до створення коментаря у форматі doxygen зі списком параметрів, значень, які повертаються, тощо.
|-
|-


| <keycap>Ctrl+T</keycap>
| <keycap>Ctrl+T</keycap>
|Transpose the current and the previous character
| Поміняти місцями поточний і попередній символи
|-
|-


| <keycap>Ctrl+K</keycap>
| <keycap>Ctrl+K</keycap>
|Delete the current line (note: this is not just emacs' "delete from here to the end of the line")
| Вилучити поточний рядок (зауваження: ця дія не збігається за результатом з дією «вилучити звідси до кінця рядка» у emacs)
<!--{-->|}
<!--{-->|}


{{Prevnext2
{{Prevnext2
| prevpage=Special:MyLanguage/KDevelop4/Manual/Sessions_and_projects | nextpage=Special:MyLanguage/KDevelop4/Manual/Building_(compiling)_projects_with_custom_Makefiles
| prevpage=Special:MyLanguage/KDevelop4/Manual/Sessions_and_projects | nextpage=Special:MyLanguage/KDevelop4/Manual/Code_generation_with_templates
| prevtext=Сеанси і проекти | nexttext=Збирання (компіляція) проектів з нетиповими Makefile
| prevtext=Сеанси і проекти | nexttext=Створення коду за допомогою шаблонів
| index=Special:MyLanguage/KDevelop4/Manual | indextext=Повернутися до меню
| index=Special:MyLanguage/KDevelop4/Manual | indextext=Повернутися до меню
}}
}}


[[Category:Розробка/uk]]
[[Category:Розробка/uk]]

Latest revision as of 12:49, 14 July 2018

Other languages:

Робота з кодом програм

Окрім зневаджування, читання та написання коду є найважливішими завданнями під час розробки програмного забезпечення. З метою полегшення навігації кодом та його написання у KDevelop передбачено багато різних інструментів. Як буде докладніше показано у наступних розділах, KDevelop не просто редактор коду, — це скоріше система керування кодом, яка може подавати різні дані, отримані на основі аналізу загальної сукупності коду всього вашого сеансу роботи.

Інструменти та панелі перегляду

Для роботи з проектами у KDevelop передбачено інструменти. Інструмент надає певні дані щодо коду або виконує з ним певну дію. Інструментам відповідають кнопки вздовж периметра вікна програми (з вертикальним текстом на полях ліворуч і праворуч та горизонтальним вздовж нижнього поля). Якщо ви натиснете таку кнопку, у головному вікні буде відкрито підвікно — панель перегляду; якщо кнопку буде натиснуто ще раз, відповідне підвікно буде закрито.

Зауваження
Закрити панель можна також натисканням кнопки x, розташованої у верхньому правому куті панелі.


На наведеному вище зображенні ви можете бачити певний набір інструментів, вирівняних за лівим і правим полем. Ліворуч відкрито панель інструмента Класи, праворуч — Фрагменти. Посередині можна бачити панель редактора. З практичних міркувань, переважну частину часу розробки варто працювати лише з редактором та панеллю Класи чи Перегляд коду, відкритою ліворуч. На час використання певного інструмента можна відкрити його панель, яку після використання варто закрити з метою збільшення простору для панелі редактора.

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

У KDevelop ви можете скористатися багатьма іншими інструментами, не всі з них представлено кнопками вздовж периметра вікна у початковому стані. Щоб додати кнопку, скористайтеся пунктом меню Вікна -> Додати панель інструмента. Ось перелік можливих корисних інструментів:

  • Класи: повний список всіх класів, які визначено у одному з проектів або у вашому сеансі з усіма вбудованими функціями та змінними. Натискання пункту елемента класу відкриє вікно редактора з місцем оголошення елемента, пункт якого було натиснуто.
  • Документи: містить список нещодавно відкритих файлів за типами (наприклад, файли з кодом, файли латок, звичайні текстові документи).
  • Перегляд коду: залежно від розташування курсора у редакторі файла, на цій панелі буде показано пов’язані з кодом дані. Наприклад, якщо курсор перебуває у рядку з #include, на панелі буде показано дані щодо файла, який включено до коду, зокрема дані щодо оголошених у файлі класів. Якщо курсор перебуває на порожньому рядку у файлі, на панелі буде показано класи і функції, оголошені і визначені у поточному файлі (всі як посилання: натискання відповідного пункту відкриватиме файл з оголошенням або визначенням класу чи функції). Якщо курсор перебуває на визначенні функції, на панелі буде показано місце оголошення та список місць, у яких використано функцію.
  • Файлова система: показує ієрархічну структуру файлової системи.
  • Документація: надає вам змогу виконувати пошук даних на сторінках довідника (man) та у інших довідкових документах.
  • Фрагменти: на цій панелі буде наведено фрагменти тексту, які використовують вами регулярно, і які ви не хочете повторно вводити кожного разу. Наприклад, на основі якого було створено знімок екрана, була потреба часто використовувати фрагмент коду
for (typename Triangulation< dim>::active_cell_iterator cell
      = triangulation.begin_active();
   cell != triangulation.end();
   ++cell)


Вираз доволі незграбний, але використовується майже у такій формі кожного разу, коли вам потрібен цикл, — чудовий кандидат на включення до списку фрагментів.

  • Konsole: відкриває панель командного рядка у головному вікні KDevelop, щоб ви могли віддати потрібну вам команду оболонки (наприклад, виконати ./configure).

Для багатьох програмістів найважливішою є економія вертикального місця на екрані. Щоб досягти такої економії, ви можете розташувати панелі інструментів вздовж лівої та правої межі вікна програми. Щоб пересунути панель, клацніть на заголовку правою кнопкою миші і виберіть нове її розташування.

Огляд роботи з кодом

Локальні дані

KDevelop розуміє код програми, тому це середовище може надавати вам дані щодо змінних або функцій вашої програми. Наприклад, у цьому підручнику наведено знімок роботи з фрагментом коду, де вказівник миші наведено на символ cell у рядку 1316 (якщо ви надаєте перевагу роботі за допомогою клавіатури, того самого ефекту можна досягти утримуванням певний час натиснутою клавіші Alt):

KDevelop показує підказку, зокрема тип змінної (тут: DoFHandler<dim>active_cell_iterator), де цю змінну оголошено (контейнер, яким тут є функція-обгортка get_maximal_velocity, оскільки це локальна змінна), тип даних (змінна, не функція, клас або простір назв) та місце оголошення (у рядку 1314, декілька рядків коду).

У поточному контексті з символом, на який наведено вказівник миші, не пов’язано жодної документації. У нашому прикладі, де вказівник миші наведено на символ get_this_mpi_process у рядку 1318, буде показано такі дані:

Тут KDevelop показано оголошення зі стороннього файла (utilities.h, який є частиною зовсім іншого проекту того самого сеансу) разом з коментарем у форматі doxygen, який супроводжує цей оголошення.

Ще кориснішими підказки робить те, що вони є динамічними: можна натиснути пункт контейнера, щоб отримати дані щодо контексту, у якому оголошено змінну (тобто дані щодо простору назв System, зокрема місця його оголошення, визначення, використання та документації), і можна натиснути сині посилання, які повернуть курсор на позицію оголошення символу (наприклад, у utilities.h, рядок 289) або покажуть список місць, у яких використано символ у поточному файлі або усіх проектах поточного сеансу. Остання можливість буде корисною, якщо вам потрібно визначити, як, наприклад, певну функцію використано у об’ємному коді.

Зауваження
Панель підказки з часом зникатиме: щоб її знову відкрити доведеться знов утримувати натиснутою клавішу Alt або наводити вказівник миші на фрагменти коду. Якщо вам потрібно зафіксувати дані з цієї панелі, відкрийте панель інструмента Перегляд коду. У нашому прикладі курсор перебуває у тій самій функції, що і раніше, а на панелі інструмента ліворуч показано той самий набір даних, що і на панелі підказки раніше:
Пересування курсора у правій частині вікна призводитиме до зміни даних у його лівій частині. Натискання кнопки Заблокувати поточний перегляд у верхній правій частині надасть вам змогу зафіксувати дані, убезпечивши їх від зміни розташування курсора на час перегляду.


Зауваження
Доступ до контекстних даних такого типу можна отримати з багатьох частин KDevelop, не лише з панелі редактора коду. Наприклад, утримування натиснутою клавіші Alt у списку автоматичного доповнення (наприклад, під час пришвидшеного відкриття якогось файла) також призводитиме до показу контекстних даних щодо поточного рядка.


Дані щодо окремих файлів

Наступним рівнем є отримання даних щодо всього файла коду, над яким ви працюєте. Щоб переглянути її, розташуйте курсор на початку поточного файла і подивіться на дані, які буде показано на панелі інструмента Перегляд коду:

Тут середовищем показано список просторів назв, класів та функцій, оголошених або визначених у поточному файлі. За допомогою цього списку ви можете ознайомитися з загальними даними щодо дій, які виконуються у файлі, та безпосередньо перейти до будь-якого з оголошень або визначень без потреби у гортанні коду файла або пошуку певного фрагмента.

Зауваження
Дані, які показано для всього файла, є тими самими, які буде показано у режимі «Огляд», обговорення якого у контексті навігації кодом викладено далі. Відмінність полягає у тому, що у режимі огляду ці дані буде показано лише на тимчасовій панелі підказки.


Дані щодо проектів та сеансів

Існує багато способів отримати загальні дані щодо проекту (або, фактично, всіх проектів сеансу). Такі дані, зазвичай, можна знайти на панелях перегляду різноманітних інструментів середовища. Наприклад, на панелі інструмента Класи показано ієрархічну структуру всіх класів і зовнішніх просторів назв для всіх проектів сеансу, разом з вбудованими функціями та змінними кожного з цих класів:

Знову ж таки, за допомогою наведення вказівника миші на запис у списку можна отримати дані щодо відповідного символу, розташування його оголошення та визначення і випадків використання. Подвійним клацанням на пункті цього ієрархічного списку можна відкрити вікно редактора на позиції, де оголошено або визначено символ.

Але ви можете скористатися і іншими способами перегляду загальних даних. Наприклад, за допомогою інструмента Документи можна поглянути на проект з точки зору типів файлів або інших документів, з яких складається проект:

Пояснення щодо кольорів підсвічування

У KDevelop для підсвічування об’єктів у коді використовується ціла палітра кольорів. Якщо вам відоме значення цих кольорів, ви можете дуже швидко отримати доволі багато інформації щодо коду, просто подивившись на кольори, навіть не розбираючи кожен із символів коду окремо. Використано такі правила підсвічування:

  • Об’єкти типів Class / Struct, Enum (значенні і тип), (загальні) функції та учасники класів буде позначено власним кольором (класи — зеленим, переліки (enum) — темно-червоним, а учасники — темно-жовтим або фіолетовим, (загальні) функції — завжди фіолетовим).
  • Всі загальні змінні буде позначено темно-зеленим кольором.
  • Ідентифікатори, які є визначеннями інших типів, буде позначено синьо-зеленим кольором.
  • Всі оголошення та визначення об’єктів буде позначено напівжирним шрифтом.
  • Якщо доступ до учасника класу здійснюється з контексту його визначення (базового або похідного класу), запису буде позначено жовтим кольором. Якщо ж доступ здійснюється поза цим контекстом, запису буде позначено фіолетовим кольором.
  • Якщо учасник позначено як закритий (private) або захищений (protected), колір запису буде трохи темнішим ніж зазвичай.
  • Для локальних для вмісту функції змінних кольори вибиратимуться на основі хеш-коду ідентифікатора. Це ж стосується і параметрів функції. Ідентифікатор завжди матиме той самий колір у межах простору своєї дії, але той самий ідентифікатор матиме інший колір, якщо позначатиме інший об’єкт, тобто якщо його буде перевизначено на вкладеному рівні, отже ви зазвичай бачитимете для назви одного ідентифікатора у різних просторах однаковий колір. Отже, якщо у коді є декілька функцій, що приймають параметри з однаковими назвами, параметри цих функцій матимуть однаковий колір. Таке розфарбовування може бути окремо вимкнено за допомогою сторінки кольорів у діалоговому вікні параметрів програми.
  • Ідентифікатори, для яких KDevelop не може визначити відповідне оголошення, буде позначено білим кольором. Таке позначення часто буває спричинено пропущеними інструкціями #include.
  • Крім описано вище розфарбування, буде застосовано звичайні правила підсвічування синтаксичних конструкцій, визначені у Kate'. Якщо виникатимуть конфлікти з підсвічуванням текстового редактора, завжди використовуватиметься семантичне підсвічування KDevelop.
Зауваження
Розфарбовування локальних змінних можна вимкнути за допомогою пункту Параметри...->Налаштувати KDevelop...->Підтримка мов->Інтенсивність локального розфарбовування, пересунувши відповідний повзунок до мінімального значення. Так само, розфарбовування загальних змінних, загальний функцій, класів, структур, переліків та членів класу можна вимкнути за допомогою пункту Параметри...->Налаштувати KDevelop...->Підтримка мов->Інтенсивність загального розфарбовування


Пересування між фрагментами коду

У попередньому розділі ми обговорювали вивчення коду програми, тобто отримання даних щодо символів, файлів та проектів. Наступним кроком є перехід між компонентами коду, тобто навігація кодом. Знову ж таки, існує декілька рівнів, на яких можна здійснювати подібну навігацію: локально, у межах файла і у межах проекту.

Зауваження
Доступ до багатьох засобів навігації можна отримати за допомогою меню Навігація головного вікна KDevelop.


Пересування поточним фрагментом

KDevelop — набагато більше, ніж просто редактор, — це також редактор коду. Тому, звичайно ж, ви можете пересувати курсор текстом за допомогою звичайних клавіш зі стрілочками. Ви також можете скористатися натисканням клавіш PageUp та PageDown і всіма іншими командами, якими можна скористатися у звичайному текстовому редакторі.

Пересування файлами та режим огляду

На рівні окремого файла у KDevelop передбачено багато способів навігації кодом програми. Приклад:

  • Огляд: відкрити панель з оглядом вмісту поточного файла можна у принаймні три різних способи:
    • Натисканням кнопки Огляд у верхній правій частині головного вікна або натисканням комбінації клавіш Alt + Ctrl + N. У відповідь буде відкрито спадне меню зі списком всіх функцій та оголошень класів:
      Після цього ви можете вибрати пункт, до якого слід перейти, або — якщо таких пунктів багато, — почніть вводити текст, який може бути частиною потрібного пункту. У такому разі, введення символів у текстове поле скорочуватиме список, оскільки з нього виключатимуться пункти, які не відповідають введеним вами даним, доки список не буде скорочено до прийнятних розмірів.
    • Розташуванням курсора у області файла (тобто поза межами оголошень та визначень функцій або класів) з відкритою панеллю інструмента Перегляд коду:
      За показаною панеллю ви зможете стежити з даними поточного файла і надасть вам змогу вибрати пункт, до якого ви хочете перейти.
    • Наведенням вказівника миші на вкладку одного з відкритих файлів. У відповідь буде показано панель з оглядом даних файла у відповідній вкладці.
  • Файли коду впорядковано у список оголошень та визначень. За допомогою натискання комбінацій клавіш Alt + Ctrl + PgUp і Alt + Ctrl + PgDown можна переходити до визначення попередньої або наступної функції у файлі.

Пересування проектами та сеансами: семантичне пересування

Як ми вже згадували раніше, зазвичай KDevelop не працює з окремими файлами коду, замість цього середовище працює з цілими проектами (або, точніше, з усіма проектами, які є частиною поточного сеансу). Внаслідок цього середовище надає можливість навігації у межах цілих проектів. Частина цих можливостей є наслідком можливостей, які ми вже обговорювали у розділі щодо навігації кодом, інші ж є абсолютно відмінними від них. Основною особливістю цих можливостей навігації є те, що їх засновано на семантичному розумінні коду, тобто для роботи з ними потрібна певна обробка цілих проектів та пов’язаних з ними даних. У наведеному нижче списку показано декілька способів навігації кодом, який може зберігатися у великій кількості окремих файлів:

  • Як ми вже бачили з розділу щодо навігації кодом, ви можете отримати панель з поясненнями щодо окремого простору назв, класу, функції або змінної наведенням вказівника миші на відповідний запис у коді або утримуванням натиснутою клавіші Alt. Ось приклад:
    Натискання посилань на оголошення символу або розгортання списку використань надає вам змогу перейти до відповідних місць коду. Подібного ефекту можна досягти за допомогою панелі перегляду Перегляд коду, яку ми вже обговорювали.
  • Швидке відкриття: дуже потужним способом пересування файлами у KDevelop є різноманітні інструменти швидкого відкриття. Передбачено чотири різновиди таких інструментів:
    • Швидке відкриття класу (Навігація -> Швидко відкрити клас або Alt + Ctrl + C): вам буде показано список всіх класів у поточному сеансі. Почніть вводити (частину) назви класу, і середовище скоротить список до назв, які відповідають введеній частині. Коли список стане достатньо коротким, просто виберіть у ньому елемент за допомогою клавіш зі стрілками вгору і вниз, а KDevelop відкриє місце у коді, де клас було оголошено.
    • Швидке відкриття функції (Навігація -> Швидко відкрити функцію або Alt + Ctrl + M): вам буде показано список всіх (вбудованих) функцій, які є частиною проектів у поточному сеансі, вибрати потрібну вам функцію можна у той самий спосіб, у який вибирається клас. Зауважте, що у списку можуть бути одразу пункти оголошення та визначення функцій.
    • Швидке відкриття файла (Навігація -> Швидко відкрити файл або Alt + Ctrl + O): вам буде показано список всіх файлів, які є частиною проектів поточного сеансу, вибрати потрібний можна буде у описаний вище спосіб.
    • Універсальне швидке відкриття (Навігація -> Швидко відкрити або Alt + Ctrl + Q): якщо ви забули, які комбінації клавіш пов’язано з описаними вище командами, це універсальний спосіб: вам буде показано список всіх файлів, функцій, класів та інших частин проектів, з якого ви зможете вибрати потрібний вам пункт.
  • Перехід до оголошення або визначення: під час реалізації функції часто виникає потреба у переході до місця, де цю функцію оголошено, наприклад, для синхронізації списку аргументів між оголошенням і визначенням або для оновлення документації. Виконати такий перехід можна розташуванням курсора на назві функції з наступним вибором пункту меню Навігація -> Перейти до оголошення (або натисканням комбінації клавіш Ctrl + .). Повернутися до визначення можна у декілька способів:
    • За допомогою пункту меню Навігація -> Перейти до визначення (або натискання комбінації клавіш Ctrl + ,).
    • За допомогою пункту меню Навігація -> Попередній переглянути контекст (або натискання комбінації клавіш Meta + Стрілка ліворуч), як це описано далі.
Зауваження
Перехід до оголошення символу не обмежується лише функціями, які ви реалізуєте. Цей спосіб працює і у разі розташування курсора на назві (локальної, загальної чи вбудованої) змінної: вибір відповідного пункту меню призведе до пересування області перегляду до оголошення символу. Отже ви можете, наприклад, розташувати курсор на назві класу у оголошенні змінної функції і перейти до оголошення цього класу.


  • Перемкнути визначення/оголошення: у наведеному вище прикладі для переходу до місця оголошення поточної функції нам потрібно було спочатку розташувати курсор на назві функції. Якщо вам не хочеться цього робити, скористайтеся пунктом меню Навігація -> Перемкнути визначення/оголошення (або натисніть комбінацію клавіш Shift + Ctrl + C), щоб перейти до оголошення функції, у якій перебуває курсор. Повторний вибір цього пункту меню поверне курсор назад до визначення функції.
  • Попереднє/ Наступне використання: розташування курсора на назві локальної змінної з наступним вибором пункту меню Навігація -> Наступне використання (або натискання комбінації клавіш Meta + Shift + Стрілка праворуч) переведе вас до наступного використання цієї змінної у коді. Зауважте, що буде виконано не лише пошук наступного використання назви змінної, але і взято до уваги і те, що змінні з тією самою назвою, але у інших просторах назв, є іншими. Те саме стосується і назв функцій. Вибір пункту Навігація -> Попереднє використання (або натискання комбінації клавіш Meta + Shift + Стрілка ліворуч) переведе перегляд до попереднього використання символу.
Зауваження
Щоб переглянути список всіх використань назв, якими здійснюватиметься циклічний перехід внаслідок використання цієї команди, розташуйте курсор на назві символу і відкрийте панель Перегляд коду або натисніть і утримуйте клавішу Alt. Докладніше про використання цього прийому можна дізнатися з розділу щодо навігації кодом.


Зауваження
Деякі із комбінацій клавіш вже може бути використано у вашій програмі для керування файлами (наприклад Meta + стрілк ліворуч використовується у LXDE/Openbox); ви можете або змінити комбінацію клавіш для скорочення у kdevelop за допомогою пункту меню Параметри...->Налаштувати скорочення, або змінити налаштування засобу керування вікнами (наприклад, змінити .config/openbox/lubuntu-rc.xml)


  • Список контекстів: у переглядачах сторінок інтернету передбачено цю можливість, — ви можете пересуватися вперед і назад списком нещодавно відвіданих сторінок. У KDevelop теж є така можливість, але замість сторінок ви пересуваєтеся контекстами. Контекст — це поточне розташування курсора, перехід до якого або з якого було здійснено за допомогою будь-яких дій, окрім натискання клавіші зі стрілками на клавіатурі (наприклад, натискання пункту на панелі підказки, панелі Перегляд коду, одного з пунктів меню Навігація або використання будь-якої іншої команди навігації). За допомогою пунктів меню Навігація -> Попередній переглянути контекст (Meta + Стрілка ліворуч) та Навігація -> Наступний переглянутий контекст (Meta + Стрілка праворуч) ви можете пересуватися списком відвіданих контекстів подібно до того, як за допомогою пунктів назад і вперед ви можете пересуватися між сторінками, відвіданими за допомогою програми для перегляду інтернету.
  • Нарешті, ви можете скористатися панелями інструментів, за допомогою яких можна переходити до різних місць у коді. Наприклад, за допомогою інструмента Класи ви можете користуватися списком всіх просторів назв та класів у всіх проектах поточного сеансу. Ви можете розгортати пункти списку для перегляду списків вбудованих функцій та змінних кожного з класів:
    Подвійне клацання на пункті (або використання відповідного пункту контекстного меню, яке можна відкрити клацанням правою кнопкою миші) надасть вам змогу перейти до місця оголошення пункту. На інших панелях інструментів можна скористатися подібними ж прийомами, наприклад, на панелі Проекти буде наведено список частин сеансу:
    Знову ж таки, подвійне клацання на пункті файла призведе до його відкриття.


Введення коду

Оскільки KDevelop «розуміє» код ваших проектів, це середовище може допомогти вам у написанні коду. Нижче наведено огляд деяких з цих допоміжних можливостей.

Автозавершення

Ймовірно, найкориснішою можливістю є можливість з автоматичного завершення фрагментів коду. Розглянемо, наприклад, такий фрагмент коду:

class Car {
  // ...
  public:
    std::string get_color () const;
};

void foo() 
{
  Car my_ride;
  // ...якісь дії з цією змінною...
  std::string color = my_ride.ge

У останньому рядку KDevelop запам’ятає, що змінна my_ride належить до типу Car і буде автоматично пропонувати доповнення назви вбудованої функції ge у форматі get_color. Фактично, вам достатньо вводити назву, аж доки список знайдених відповідників не починатиметься з потрібного вам виразу, а потім натиснути клавішу Enter:

Зауважте, що ви можете клацнути на панелі підказки, щоб отримати більше даних щодо функції, окрім типу даних, які вона повертає, і те, чи є ця функція відкритою (public):

Автоматичне доповнення може значно скоротити витрату часу на введення даних, якщо у вашому проекті використано змінні або функції з довгими назвами. Крім того, автоматичне доповнення допомагає запобігти друкарським помилкам у назвах (а отже помилкам під час збирання), за його допомогою простіше запам’ятати точні назви функцій. Наприклад, якщо назви всіх ваших функцій отримання даних починаються з get_, можливість автоматичного доповнення надасть вам змогу скористатися повним списком таких функцій, щойно ви наберете перші чотири літери назви, що, звичайно, допоможе вам згадати, яку з них ви мали намір використати. Зауважте, що для роботи з автоматичним доповненням не обов’язково, щоб оголошення класу Car та змінної my_ride перебували у одному файлі, над яким ви зараз працюєте. KDevelop просто має знати, що ці клас і змінну пов’язано, тобто файли, у яких зберігається код цих елементів програми, мають бути частиною проекту, над яким ви працюєте.

Зауваження
KDevelop не завжди може здогадатися, коли слід допомогти вам автоматичним доповненням коду. Якщо підказку автоматичного доповнення не було відкрито автоматично, натисніть комбінацію клавіш Ctrl + Пробіл, щоб відкрити список варіантів вручну. Загалом же, для того, щоб можна було скористатися автоматичним доповненням, KDevelop має обробити файли коду вашого проекту. Цю дію буде виконано у фоновому режимі для всіх файлів, які є частиною проектів поточного сеансу після запуску KDevelop, а також після того, як ви припините вводити дані на частку секунди (тривалість паузи можна змінити).


Зауваження
KDevelop виконує обробку лише тих файлів, які є файлами коду програми, відповідно до типу MIME файла. Цей тип не встановлюється до першого збереження файла. Отже створення нового файла і введення коду до цього файла не увімкне автоматичної обробки файла для використання даних з метою автоматичного доповнення. Щоб увімкнути обробку, файл доведеться зберегти.


Зауваження
Для того, щоб можна було скористатися автоматичним доповненням, KDevelop повинен мати доступ до файлів заголовків. Середовище виконає пошук цих файлів у декількох типових теках. Якщо файл заголовка не вдасться знайти автоматично, його пункт у списку буде підкреслено червоною лінією. У такому разі вам слід клацнути на цьому пункті правою кнопкою миші і повідомити KDevelop явним чином, де слід шукати цей файл та дані, які у ньому зберігаються.


Зауваження
Налаштування автоматичного доповнення обговорено у іншому розділі цього підручника.


Додавання нових класів та реалізація вкладених функцій

У KDevelop передбачено допоміжну програму для додавання нових класів. Її роботу описано у розділі Створення класу. Простий клас C++ можна створити за допомогою основного шаблона C++ з категорії Клас. У допоміжній програмі ви можете вибрати попередні функції-елементи, наприклад порожній конструктор, конструктор копіювання та деструктор.

Після завершення роботи допоміжної програми буде створено і відкрито у редакторі нові файли. Основу файла заголовків вже створено, а у новому класів є всі вибрані нами вбудовані функції. Наступними двома кроками мають бути документування класу та його вбудованих функцій та реалізація цих класів і функцій. Нижче ми обговоримо допоміжні засоби з документування класів і функцій. Щоб реалізувати спеціальні функції, які ми вже додали, просто перейдіть на вкладку bus.cpp, де вже є каркас наших функцій:

Щоб додати нові вкладені функції, поверніться на вкладку bus.h і додайте назву функції. Наприклад, можна додати таке:

Зауважте, що реалізацію вже розпочато. Але у межах багатьох стилів програмування функції не слід реалізовувати у файлах заголовків, це слід робити у відповідних файлах .cpp. Для цього розташуйте курсор на назві функції і скористайтеся пунктом меню Код -> Пересунути до коду або натисніть комбінацію клавіш Ctrl + Alt + S. Код між фігурними дужками буде пересунуто з файла заголовків (його буде замінено на крапку з комою для завершення оголошення функції) до відповідного файла коду:

Введення коду розпочато. Змінна students має, ймовірно, бути вбудованою змінною класу Bus, але її ще не додано до цього класу. KDevelop підкреслено цю змінну, щоб позначити те, що середовищу ще нічого не відомо про цю змінну. Цю проблему просто розв’язати: натискання назви змінної відкриє таку панель підказки:

(Того самого результату можна досягти за допомогою пункту контекстного меню Розв’язати: оголосити як.) Давайте виберемо «3 - private unsigned int» (за допомогою миші або натискання комбінації клавіш Alt + 3). Ось що буде додано до файла заголовків:

Варто зауважити, що KDevelop визначає тип змінної, яку слід оголосити, за виразом, використаним для її ініціалізації. Наприклад, якщо було використано додавання у такому доволі безсумнівному форматі, середовище запропонує тип змінної double:

Нарешті, метод використання пункту меню Код -> Пересунути до коду не завжди призводить до вставляння вбудованої функції до бажаного місця у коді. Наприклад, вам може бути потрібним визначення коду як inline і розташування його у нижній частині файла заголовків. У такому разі вкажіть оголошення і почніть введення визначення функції ось так:

KDevelop автоматично пропонує всіх можливі варіанти доповнення. Вибір одного з двох записів add_students призведе до створення такого коду, у якому вже буде заповнено список параметрів:

Оголошення для документування

Хороший код завжди добре документовано, як на рівні реалізації алгоритмів у функціях, так і на рівні інтерфейсу, — тобто класи (вбудовані і загальні) функції та (вбудовані і загальні) змінні слід документувати, щоб всім було зрозумілим їхнє призначення, можливі значення аргументів, попередні та остаточні умови тощо. У документуванні інтерфейсів фактичним стандартом є формат коментарів doxygen, дані його можна видобути і показати на придатних для пошуку інтернет-сторінках.

У KDevelop передбачено підтримку коментарів у цьому форматі за допомогою скорочення для створення оболонки-коментаря, який документуватиме клас або вбудовану функцію. Наприклад, припустімо ви вже створили такий код:

class Car {
  public:
    std::string get_color () const;
};

Тепер нехай вам потрібно додати документацію для класу і вбудованої функції. Для цього пересуньте курсор на перший рядок коду і скористайтеся пунктом меню Код -> Документувати оголошення або натисніть комбінацію клавіш Alt + Shift + D. KDevelop відкриє таке діалогове вікно:

Курсор вже перебуває у затіненій області, щоб ви могли ввести короткий опис (після ключового слова doxygen @brief) цього класу. Тепер ви можете продовжити додавати документацію до цього коментаря, який краще пояснюватиме призначення класу:

Доки редагування відбуватиметься у коментарі текст коментаря буде позначено зеленим кольором (колір буде знято, щойно ви виведете курсор за межі коментаря). Коли ви наприкінці рядка натиснете клавішу Enter, KDevelop автоматично додасть новий рядок, що починатиметься з зірочки та відступу у один символ.

Тепер виконаємо документування вбудованої функції. Знову розташуйте курсор на рядку оголошення і виберіть пункт меню Код -> Документувати оголошення або натисніть комбінацію клавіш Alt + Shift + D:

Знову ж таки, KDevelop автоматично створить каркас коментаря разом з документації щодо самої функції, а також типом даних, які вона повертає. У нашому випадку назва функції доволі очевидно описує її призначення, але часто аргументи функції можуть бути доволі неочевидними, їх слід документувати окремо. Наприклад, розгяньмо трохи цікавішу функцію та коментар, який автоматично створить для неї KDevelop:

У нашому прикладі у запропонованому коментарі вже містяться всі поля Doxygen для окремих параметрів.

Перейменування змінних, функцій і класів

Іноді виникає потреба у перейменуванні функції, класу або змінної. Наприклад, нехай маємо такий код:

Нехай пізніше ми зрозуміємо, що назва remove_students є невдалою, і її варто назвати, скажімо, throw_out_students. Ви могли б виконати пошук з заміною назви функції, але у такого способу є два недоліки:

  • Функцію може бути використано у декількох файлах.
  • Нам потрібно перейменувати лише цю функцію і не чіпати функції, які можуть мати ту саму назву, але які оголошено у інших класах або просторах назв.

Обидві ці проблеми можна розв’язати наведенням курсора на всі використання назви функції з наступним вибором пункту Код -> Перейменувати оголошення (або клацанням правою кнопкою миші на назві з вибором пункту Перейменувати Bus::remove_students). У відповідь буде відкрито діалогове вікно, за допомогою якого ви зможете ввести нову назву функції і переглянути всі місця, де використано функцію:

Фрагменти коду

У більшості проектів зустрічаються фрагменти коду, які доводиться використовувати доволі часто. Приклади: інструкції компілятора, цикл для всіх інструкцій, для функцій запису інтерфейсу користувача перевірки введених користувачем даних без відкриття вікна повідомлення про помилку. У проекті автора цього підручника часто використовується такий різновид коду:

for (typename Triangulation<dim,spacedim>::active_cell_iterator
       cell = triangulation.begin_active();
     cell != triangulation.end(); ++cell)
  ... якісь дії над cell ...

Замість введення таких фрагментів тексту раз за разом, що може призвести до супутніх друкарських помилок ви можете скористатися інструментом Фрагменти KDevelop. Для цього відкрийте панель інструментів (див. розділ Інструменти і панелі перегляду, якщо відповідної кнопки ще немає на панелях навколо панелі редагування). Або скористайтеся меню Вікно -> Панелі інструментів і увімкніть показ панелі Фрагменти. Натисніть кнопку Додати сховище (трохи невдала назва: за допомогою цієї кнопки ви можете створити іменовану збірку фрагментів коду певного типу, наприклад, фрагментів коду C++) і створіть порожнє сховище. Потім натисніть кнопку , щоб додати фрагмент і відкрити таке діалогове вікно:

Зауваження
У назві фрагмента не повинно бути пробілів та інших спеціальних символів, оскільки такий фрагмент повинен мати назву, подібну до назви звичайної функції або змінної (причини цього викладено нижче). Якщо у назві фрагмента є пробіли, кнопка Гаразд буде неактивною без будь-яких пояснень. Цей недолік виправлено у нещодавніх версіях KDevelop, див. ваду KDevelop №274299.


Щоб скористатися таким чином визначеним фрагментом, вам слід просто почати вводити у коді його назву, як ви це робите для будь-яких інших функцій або змінних. Для введених літер буде відкрито панель автоматичного доповнення (це означає, що можна використовувати будь-які достатньо довгі для розрізнення назви фрагментів, зокрема назви, подібні до використаної нами), якщо ви виберете відповідний пункт фрагмента на панелі підказки автоматичного доповнення (наприклад, натисканням клавіші Enter), вже введену частину назви фрагмента буде замінено повним текстом фрагмента з відповідними відступами:

Зауважте, що для користування фрагментами не потрібно тримати відкритою і видимою панель інструмента Фрагменти: цією панеллю слід користуватися, лише для визначення нових фрагментів. Іншим, але менш зручним, способом перегляду фрагментів є просте натискання його пункту на відповідній панелі інструмента.

Зауваження
Фрагменти є набагато потужнішими, ніж було пояснено. Повний опис можливостей, які вони надають, ознайомтеся з докладною документацією з інструмента «Фрагменти».

Режими і робочі набори

Якщо вже ви дочитали до цього місця, зверніть увагу на верхню праву частину головного вікна KDevelop: як можна бачити з наведеного знімка, KDevelop може працювати у трьох режимах: Код (роботу у цьому режимі ми обговорювали у поточному розділі, коли оглядали роботу з кодом), Зневаджування (див. Зневаджування програм) та Перегляд (див. Робота з системами керування версіями).

Для кожного з режимів передбачено власний набір інструментів, кнопки яких розташовано вздовж периметра вікна середовища, для кожного режиму передбачено власний робочий набір відкритих файлів і документів. Крім того, кожен такий робочий набір пов’язано з поточним сеансом, тобто маємо взаємозв’язок, подібний до показаного вище. Зауважте, що файли у робочому наборі є частиною одного сеансу, але можуть належати до різних проектів, які є частинами цього сеансу.

Якщо ви відкрили вікно KDevelop вперше, робочий набір буде порожнім, — ще не відкрито жодного файла. Але з відкриттям файлів для редагування (або зневаджування, перегляду у інших режимах) ваш робочий набір розширюватиметься. Той факт, що ваш робочий набір не є порожнім, буде показано символом на вкладці, подібно до символу на знімку, наведеному нижче. Кожного разу, коли ви завершуватимете роботу KDevelop, а потім починатимете її знову, робочий набір буде зберігатися і відновлюватися, тобто ви працюватимете з одним набором відкритих файлів.

Якщо ви наведете вказівник миші на символ робочого набору, середовище покаже вам список файлів, які відкрито у робочому наборі (у нашому прикладі список з файлів step-32.cc та step-1.cc). Натискання кнопки з червоним мінусом призведе до закриття вкладки відповідного файла. Натискання кнопки з відповідною назвою надасть вам змогу закрити весь робочий набір одразу (тобто закрити всі відкриті файли). Сенс цього пункту у тому, що за його допомогою можна не лише закрити всі файли, але і зберегти робочий набір, а також відкрити новий порожній файл. Ось як це виглядає:

Зверніть увагу на дві піктограми ліворуч від трьох заголовків вкладок режимів (піктограму з сердечком та іншу піктограму лівіше). Кожній з цих піктограм відповідає збережений робочий набір, окрім вже відкритого робочого набору. Якщо ви наведете вказівник миші на піктограму з сердечком, ви побачите щось таке:

Середовище показує, що поточний робочий набір складається з двох файлів, та демонструє їхні назви: Makefile та changes.h. Натискання кнопки Завантажити призведе до закриття і збереження поточного робочого набору (який у нашому прикладі складається з файлів tria.h і tria.cc), після чого буде відкрито вибраний робочий набір. Крім того, ви можете назавжди вилучити робочий набір, тобто усунути його зі списку збережених робочих наборів.

Деякі корисні клавіатурні скорочення

У редакторі KDevelop використано всі звичайні клавіатурні скорочення для дій з редагування. Крім того, у редакторі передбачено декілька додаткових дій, пов’язаних з редагуванням коду програм. Деякі з цих дій мають відповідні типові клавіатурні скорочення. Нижче наведено частину з корисних клавіатурних скорочень для дій:

Пересування кодом
Ctrl+Alt+O Пришвидшене відкриття файла: вкажіть частину назви файла і виберіть той з них у каталозі проектів поточного сеансу, який вам потрібен; цей файл і буде відкрито.
Ctrl+Alt+C Пришвидшене відкриття класу: вкажіть частину назви класу і виберіть ту з назв класів, яка вам потрібна; курсор буде переведено до рядка оголошення класу.
Ctrl+Alt+M Пришвидшене відкриття функції: вкажіть частину назви функції (частини класу) і виберіть з запропонованих варіантів той, який вам потрібен; зауважте, що у списку буде показано оголошення і визначення, а курсор буде переведено до вибраного вами пункту.
Ctrl+Alt+Q Універсальне пришвидшення відкриття: вкажіть будь-які дані (назву файла, назву класу, назву функції), і вам буде показано список всіх частин проекту, які відповідають критерію пошуку.
Ctrl+Alt+N Огляд: показує список всіх дій, які виконуються у файлі, наприклад, оголошень класів та визначень функцій.
Ctrl+, Перейти до визначення функції, якщо курсор перебуває у місці її оголошення.
Ctrl+. Перейти до оголошення функції або змінної, якщо курсор перебуває у позиції визначення функції.
Ctrl+Alt+PageDown Перейти до наступної функції
Ctrl+Alt+PageUp Перейти до попередньої функції
Ctrl+G Перейти до рядка
Пошук і заміна
Ctrl+F Знайти
F3 Знайти далі
Ctrl+R Замінити
Ctrl+Alt+F Знайти і замінити у декількох файлах
Інші команди
Ctrl+_ Згорнути один рівень: вилучити блок з перегляду, наприклад, якщо ви бажаєте зосередитися на загальнішій картині у функції.
Ctrl++ Розгорнути один рівень: скасувати згортання.
Ctrl+D Зняти коментування з позначеного фрагмента тексту або поточного рядка.
Ctrl+Shift+D Додати позначки коментаря до позначеного тексту або поточного рядка.
Alt+Shift+D Документувати поточну функцію. Якщо курсор перебуває на оголошенні функції або класу, натискання цієї комбінації клавіш призведе до створення коментаря у форматі doxygen зі списком параметрів, значень, які повертаються, тощо.
Ctrl+T Поміняти місцями поточний і попередній символи
Ctrl+K Вилучити поточний рядок (зауваження: ця дія не збігається за результатом з дією «вилучити звідси до кінця рядка» у emacs)