<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://t8.lbstr.eu/index.php?action=history&amp;feed=atom&amp;title=%D0%93%D1%80%D1%8F%D0%B7%D0%BD%D1%8B%D0%B9_%D1%85%D0%B0%D0%BA</id>
	<title>Грязный хак - История изменений</title>
	<link rel="self" type="application/atom+xml" href="https://t8.lbstr.eu/index.php?action=history&amp;feed=atom&amp;title=%D0%93%D1%80%D1%8F%D0%B7%D0%BD%D1%8B%D0%B9_%D1%85%D0%B0%D0%BA"/>
	<link rel="alternate" type="text/html" href="https://t8.lbstr.eu/index.php?title=%D0%93%D1%80%D1%8F%D0%B7%D0%BD%D1%8B%D0%B9_%D1%85%D0%B0%D0%BA&amp;action=history"/>
	<updated>2026-11-04T03:12:07Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.43.9</generator>
	<entry>
		<id>https://t8.lbstr.eu/index.php?title=%D0%93%D1%80%D1%8F%D0%B7%D0%BD%D1%8B%D0%B9_%D1%85%D0%B0%D0%BA&amp;diff=9607&amp;oldid=prev</id>
		<title>imported&gt;Fervor в 15:42, 24 сентября 2017</title>
		<link rel="alternate" type="text/html" href="https://t8.lbstr.eu/index.php?title=%D0%93%D1%80%D1%8F%D0%B7%D0%BD%D1%8B%D0%B9_%D1%85%D0%B0%D0%BA&amp;diff=9607&amp;oldid=prev"/>
		<updated>2017-09-24T15:42:12Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Хак&amp;#039;&amp;#039;&amp;#039; — достижение цели посредством использования недокументированного или некорректно реализованного способа. Грязный хак — подвид [[Костыль|костылей]], быстрое решение какой-либо проблемы, в основном в краткосрочной перспективе, лишающее сущность (программу, продукт, вещь) внутренней красоты и дисгармонирующее с её внутренним устройством. [[Кошер]]ной альтернативой грязному хаку является [[:w:Рефакторинг|рефакторинг]]. Не путать с [[анти-паттерн|изжопом]] — использованием сложных, неочевидных способов реализации при наличии простых и красивых решений (см. [[Индусский код]]).&lt;br /&gt;
&lt;br /&gt;
В коде также можно увидеть так называемый &amp;#039;&amp;#039;&amp;#039;nice hack&amp;#039;&amp;#039;&amp;#039; (&amp;#039;&amp;#039;красивый хак&amp;#039;&amp;#039;), например небольшие участки кода, умело и красиво использованные не по назначению, что не вызывает рвотных рефлексов при их прочтении. Впрочем, это тоже считается дурным тоном, поскольку нарушает принцип [[KISS]].&lt;br /&gt;
&lt;br /&gt;
== Хак vs [[костыль]] ==&lt;br /&gt;
&lt;br /&gt;
Несмотря на значительную схожесть, в общем случае, понятия «хак» и «костыль» имеют заметную разницу. Не любой костыль является хаком (полно костылей, использующих стандартные приёмы, просто неуместно), но и не любой хак используется для создания костыля. Хак можно использовать как для обеспечения требуемой функциональности, так и для её нарушения или замены на нечто другое (см. [[хакер]]), тогда как костыль используется именно для решения некоторой проблемы. Хак — это способ работы, костыль — средство, которое можно получить в том числе и таким способом.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Примеры ==&lt;br /&gt;
&lt;br /&gt;
* Браузеры Internet Explorer 5 и 6 версий не поддерживают CSS-свойство &amp;#039;&amp;#039;&amp;#039;min-height&amp;#039;&amp;#039;&amp;#039;. Однако у них неправильно реализовано свойство &amp;#039;&amp;#039;&amp;#039;height,&amp;#039;&amp;#039;&amp;#039; из-за чего оно действует как min-height. Кроме того, только вышеперечисленные браузеры воспринимают CSS-код после &amp;#039;&amp;#039;&amp;#039;* html&amp;#039;&amp;#039;&amp;#039;. Остальные браузеры его игнорируют. В результате появляется возможность использовать следующий хак, позволяющий реализовывать свойство &amp;#039;&amp;#039;&amp;#039;min-height&amp;#039;&amp;#039;&amp;#039; во всех браузерах:&lt;br /&gt;
:{|&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
div {min-height: 150px;} // Это для всех браузеров&lt;br /&gt;
* html div {height: 150px;} // Это только для ИЕ&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* Чтобы получить доступ к &amp;#039;&amp;#039;private&amp;#039;&amp;#039;- или &amp;#039;&amp;#039;protected&amp;#039;&amp;#039;- членам класса, в C++ (до стандарта версии C++11) можно иногда увидеть паттерн «Паблик Морозов», открывающий доступ к защищенным данным и методам:&lt;br /&gt;
:{|&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
#define private public&lt;br /&gt;
#define protected public&lt;br /&gt;
#include &amp;lt;header.h&amp;gt;&lt;br /&gt;
#undef private // А вот пока анонимус не дописал undef это и было грязным хаком.&lt;br /&gt;
#undef protected&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
Header *h = new Header();&lt;br /&gt;
int x = h-&amp;gt;m_value; // m_value в прошлой жизни - private&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
: Более чистый способ — добавиться в «друзья» всех классов:&lt;br /&gt;
&lt;br /&gt;
:{|&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
#define private friend class Descendant; private // приписываем friend class Descendant во все классы&lt;br /&gt;
#include &amp;lt;Ancestor.hpp&amp;gt;&lt;br /&gt;
#undef private&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
Descendant *h = new Descendant();&lt;br /&gt;
int x = h-&amp;gt;m_value; // m_value в прошлой жизни - private из Ancestor&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
*  &lt;br /&gt;
{{Цитата|pre=1|— Ты пересобрал тулзу под новую версию либы?&lt;br /&gt;
— Нет, пока что просто создал симлинк с новой либы на старую.&lt;br /&gt;
— Какой грязный хак!}}&lt;br /&gt;
&lt;br /&gt;
* Зайти на любой сайт, например на [[ag.ru]] и в адресной строке браузера прописать этот код-скрипт:&lt;br /&gt;
:{|&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
javascript:R=0; x1=.1; y1=.05; x2=.25; y2=.24; x3=1.6; y3=.24; x4=300; y4=200; x5=300; y5=200; DI=document.images; DIL=DI.length; function A(){for(i=0; i&amp;lt;DIL; i++){DIS=DI[ i ].style; DIS.position=&amp;#039;absolute&amp;#039;; DIS.left=Math.sin(R*x1+i*x2+x3)*x4+x5; DIS.top=Math.cos(R*y1+i*y2+y3)*y4+y5}R++}setInterval(&amp;#039;A()&amp;#039;,5); void(0)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
: после хвастать скринами перед друганами.&lt;br /&gt;
&lt;br /&gt;
* На странице любого сайта в адресной строке браузера вписать:&lt;br /&gt;
:{|&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
javascript:document.body.contentEditable = &amp;#039;true&amp;#039;; void(0)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
: После этого можно редактировать страницу локально у себя и делать скрины. Сам сайт, естественно, [[Всем похуй|не изменится]].&lt;br /&gt;
Для того, чтоб код работал, нажимаем F12, слева внизу ищем кнопку «show console», вставляем код туда, нажимаем ENTER.&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
* [[Костыль]]&lt;br /&gt;
* [[Индусский код]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{языки программирования|Программизм}}&lt;br /&gt;
{{Md||Грязным хаком понтуются малолетние долбоёбы}}&lt;br /&gt;
&lt;br /&gt;
[[Категория:IT-сленг]]&lt;/div&gt;</summary>
		<author><name>imported&gt;Fervor</name></author>
	</entry>
</feed>