<?xml version="1.0" encoding="utf-8" ?><rss version="2.0" xmlns:tt="http://teletype.in/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:media="http://search.yahoo.com/mrss/"><channel><title>Alexey Efimov</title><generator>teletype.in</generator><description><![CDATA[Alexey Efimov]]></description><image><url>https://teletype.in/files/19/1f/191f7bba-8ec9-4ad9-a7a7-e79ca669af0e.jpeg</url><title>Alexey Efimov</title><link>https://teletype.in/@debash</link></image><link>https://teletype.in/@debash?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=debash</link><atom:link rel="self" type="application/rss+xml" href="https://teletype.in/rss/debash?offset=0"></atom:link><atom:link rel="next" type="application/rss+xml" href="https://teletype.in/rss/debash?offset=10"></atom:link><atom:link rel="search" type="application/opensearchdescription+xml" title="Teletype" href="https://teletype.in/opensearch.xml"></atom:link><pubDate>Wed, 15 Apr 2026 12:24:28 GMT</pubDate><lastBuildDate>Wed, 15 Apr 2026 12:24:28 GMT</lastBuildDate><item><guid isPermaLink="true">https://teletype.in/@debash/N47sSnZp6</guid><link>https://teletype.in/@debash/N47sSnZp6?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=debash</link><comments>https://teletype.in/@debash/N47sSnZp6?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=debash#comments</comments><dc:creator>debash</dc:creator><title>Оформление и структура класса</title><pubDate>Sun, 24 Jan 2021 17:41:08 GMT</pubDate><media:content medium="image" url="https://teletype.in/files/32/49/32491e14-dd4f-4a61-814b-569a6716b0e5.png"></media:content><category>Заметки на полях</category><description><![CDATA[<img src="https://teletype.in/files/11/57/1157e7e2-0640-4f81-90ad-59f82ff6d562.png"></img>Читаемость кода является важным аспектом в программировании и поэтому существуют определенные стандарты, как в написании кода, так и в оформлении классов. Особенно это касается вью контроллеров, которые сами по себе являются довольно массивными объектами и поэтому навигация по ним должна быть предсказуемой, в не зависимости от того работаете ли вы со своим проектом или же со сторонним. ]]></description><content:encoded><![CDATA[
  <h3>В какой последовательности должны объявляться свойства и методы класса?</h3>
  <h2>Введение</h2>
  <p>Читаемость кода является важным аспектом в программировании и поэтому существуют определенные стандарты, как в написании кода, так и в оформлении классов. Особенно это касается вью контроллеров, которые сами по себе являются довольно массивными объектами и поэтому навигация по ним должна быть предсказуемой, в не зависимости от того работаете ли вы со своим проектом или же со сторонним. </p>
  <p>В этой не большой заметке я хочу расписать основные аспекты правильного оформления классов, что бы навигация по ним была интуитивно понятной, как для вас, так и для стороннего наблюдателя.</p>
  <h2>Структура класса</h2>
  <p>Класс начинается со свойств к которым относятся аутлеты, а также публичные и приватные переменные и константы:</p>
  <figure class="m_column">
    <img src="https://teletype.in/files/11/57/1157e7e2-0640-4f81-90ad-59f82ff6d562.png" width="2042" />
  </figure>
  <p>Обратите внимание в какой последовательности объявлены свойства: сначала объявляются аутлеты, затем публичные переменные и константы, после которых уже идут приватные свойства. Так же обратите внимание на то, что аутлеты для лейблов разделяет пустая строка от аутлетов для текстовых полей. Такие разделители в виде пустых строк помогают визуально отделить логические блоки кода друг от друга, что повышает читаемость кода. Не пренебрегайте ими, но и не злоупотребляйте. Достаточно одной пустой строки, что бы отделить одно от другого. </p>
  <p>При помощи пометки <code>// MARK: </code> класс можно поделить на разделы. Эти пометки играют роль заголовков, по которым можно быстро перемещаться. У каждого файла в проекте есть содержание, открыть которое можно, кликнув на название класса в верхней строке в которой прописан путь до класса:</p>
  <figure class="m_original">
    <img src="https://teletype.in/files/8b/87/8b878d41-4d72-43f8-94d3-b80b68adc8e2.png" width="380" />
  </figure>
  <p>В этом списке отображаются все свойства и методы класса, а заголовки позволяют легче ориентироваться во всему содержимому и перемещаться в нужно место в один клик.</p>
  <p>В том случае, если класс не является вью контроллером, то после свойств класса объявляются инициализаторы, если в них есть необходимость:</p>
  <figure class="m_column">
    <img src="https://teletype.in/files/2d/3f/2d3ff7d7-3008-47a8-9844-0768ba320237.png" width="2050" />
  </figure>
  <p>После инициализаторов объявляются переопределенные методы родительского класса. Это те методы, которые помечены ключевым словом <code>override</code>. Если же вы работаете с вью контроллером, то переопределенные методы идут сразу после свойств класса:</p>
  <figure class="m_column">
    <img src="https://teletype.in/files/c6/9e/c69e4c19-9924-451f-873f-63e37499d1c1.png" width="2044" />
  </figure>
  <p>После переопределенных методов объявляются IB Actions, т.е. методы связанные с пользовательским интерфейсом:</p>
  <figure class="m_column">
    <img src="https://teletype.in/files/13/5c/135c27c1-b86a-4e56-813f-e7d571fdd717.png" width="2046" />
  </figure>
  <p>Далее идут методы экземпляра класса. Это публичные методы, которые можно вызвать из экземпляра:</p>
  <figure class="m_column">
    <img src="https://teletype.in/files/45/1e/451eeeb2-79d3-4830-bd23-ab076bf39fed.png" width="2048" />
  </figure>
  <p>И в самом конце класса объявляются приватные методы. Это те методы, которые используются исключительно внутри самого класса и не должны вызываться из экземпляра:</p>
  <figure class="m_column">
    <img src="https://teletype.in/files/c5/5c/c55c1078-de87-493e-a186-fdf1e9028939.png" width="2048" />
  </figure>
  <p>Так же классы могу иметь расширения или <code>extensions</code>. В них можно подписывать класс под протоколы и реализовывать методы эти протоколов , что бы все они были собраны в одном месте:</p>
  <figure class="m_column">
    <img src="https://teletype.in/files/f6/fc/f6fcac13-6157-4eef-ad52-4d0949da7bb6.png" width="2622" />
  </figure>
  <p>Так же можно делать расширения для приватных методов или, например для методов, которые позволяют работать с клавиатурой. Т.е. при помощи расширений можно агрегировать методы со схожими задачами. Кроме того расширения полезно использовать для распределения обязанностей между командой. В этом случае для каждого расширения создается отдельный файл, что позволяет работать над одним классом сразу нескольким участникам проекта.</p>
  <p>В итоге структура класса должна выглядеть следующим образом:</p>
  <figure class="m_column">
    <img src="https://teletype.in/files/9a/39/9a39d236-f84e-406d-8e79-aa1516243c9a.png" width="2040" />
  </figure>
  <h2>Общие советы</h2>
  <ul>
    <li>Не храните в классе методы, которые ни как не используются. Т.е. если у вас есть метод <code>viewDidLoad()</code>, но при этом он пустой, то смело его удаляйте. Ни чего лишнего в коде быть не должно.</li>
    <li>Удаляйте все шаблонные комментарии, которые достаются вам &quot;из коробки&quot; при добавлении новых классов.</li>
    <li>Используйте в качестве разделителей логических блоков кода пустые строки, но не более одной.</li>
    <li>Названия классов должны быть емкими и отражать их суть. В проекте не должно быть классов с именем &#x60;V<code>ViewController</code>Не сокращайте имена классов.  В проекте не должно быть классов с именем <code>MainVC</code>.  </li>
  </ul>

]]></content:encoded></item></channel></rss>