Сейчас научу я вас программировать!
Но прежде чем станете вы рефлексировать:
«Я сам так умею!», «Зачем мне то надо?»,
«Вот, тоже мне спец?!», «Эй, автор! Не надо тут…»
Отвечу я просто:
— Да, фана лишь ради!
Отбросьте вы ручки все и тетради,
Чаю налейте, печенья возьмите,
Того и гляди, английский подучите.
С чего мы начнём? Да сразу — к хардкору (hardcore)!
Никаких «Здравствуй, мир!» разговоров.
Сходу напишем мы здесь «вайл тру»:
while (true);
А вот что это значит, поймём лишь к утру.
Теперь перевод: «Пока (то всё честно);»
Программа стремиться быть интересной,
А может, и нет. Ведь здесь есть подвох,
Но о нём мы узнаем лишь в срок.
Теперь переходим мы к интерфейсам (interfaces).
Нет, то не части лица или фэйса (face).
Это лишь «точки соприкосновения»
Вашего и чужого, по определению.
Публичные (public) они могут быть и приватные (private).
Первые часто доводят драки, вторые — развратные.
Но прежде чем перейдём мы к примерам,
Пора нам узнать и о переменных,
Типах, объектах и знаках препинания —
Без них не понять бесполезные знания.
Зачем они вам — решите вы сами,
Ну а пока, давайте ж всё ж с нами.
Точка с запятой «;» — конец предложения
И инструкция для выполнения.
Переменная «var» любого есть типа,
Который для краткости в три буквы скрытый.
— Зачем переменные? — спросите вы.
— Ну… Где-то как чашки нужны для воды.
Можно как зверь ходить к водопою,
Но, как по мне, проще взять их с собою.
Скобки фигурные «{}»— это границы
Песочницы, где мы будем учиться.
Всему, что внутри, за границей не место,
Кроме тех случаев, что здесь неуместны.
Скобочки круглые «()» — это условие.
Другими словами: «Нужно мне то ли?»
А дальше, пожалуй, начну я себя:
Object i; // Объектик по имени «ай» — это «я»
Так, читатель, обожди здесь немножко!
Пару слешей «//» нам надо в дорожку.
Создатель — он человек склерозный,
Без комментариев будет нервозным.
Object i; // Здесь я лишь в проекте, ещё не родился,
Ведь мой тип, пол, цвет глаз… не определился.
Кто я?
class Zemlyanin { // Тип Землянин. Так и запишем.
// А интерфейс (interface) потом мы допишем.
}
Теперь не «объект» я, а гордый
Zemlyanin i = new Zemlyanin(); // Землянин!
Командой «создать» (new) в мире заявлен.
Пока я бездельник, но сейчас всё исправим —
Интрефейсика быстро мне тут добавим.
class Zemlyanin {
// Так, я хочу быть слегка сероглазым —
// Строчный параметр (param) добавлю я сразу,
// Но лишь намёком! Не смотрите так грозно!
// Я вам хардкор обещал — не взрыв мозга.
// Это конструктор объекта-меня,
public Zemlyanin (string param) {}
// А функции ниже и для Землян.
// Список (List) Землян в уголках «<>», там где тип.
// Друзяки (friends) мои, с кем хочу затусить.
public void GoOutWithFriends(List<Zemlyanin> friends) {}
// Однако сначала их надо найти.
// Не ждать же, пока соизволят прийти?
public List<Zemlyanin> LookingForFriends() {
// Тут надо бы всё же что-то вернуть (return),
// Чтобы программу совсем не загнуть.
// Список пустой я верну здесь пока,
// Чтобы книгу закрыть не поднялась рука.
return new List<Zemlyanin>();
}
// А то, что дальше, на моё усмотренье!
// Кому улыбнуться моё ведь решенье.
private void SayHiAndSmile() {}
// Кого приобнять я хочу,
private void Hug (Zemlyanin other) {}
// Кого приласкать,
private void Caress (Zemlyanin other) {}
// Кого лесом послать,
private void ExitThere (Zemlyanin other, string where) {}
// Кому сердце отдать.
private void GiveYouMyHeart (Zemlyanin other) {}
}
На этом пора с интерфейсом кончать,
Чтоб не успели вы заскучать.
Как видите, много я тут упустил,
Но, думаю, ясен был мой посыл.
И что же мне делать теперь с этим вот?
Как что? Пора-ка идти мне в народ!
// Допишем мы public к типу Землянин.
public class Zemlyanin {}
А что это значит, догадались вы сами?
Теперь интерфейс мой публичный доступен
Для всех — для кого я был неприступен.
А как достучаться ко мне и в приватный (private):
Веселый, шутливый, порой, адекватный?
— Никак. Но есть языки, где есть лазейка:
Другом назвался — пролез в телогрейку.
Тех, кто не в теме, не хватит испуг,
Если к ти́пу я допишу слово «друг» (friend),
friend class ZemlyaninFriend;
И если ЗемлянинаДруг обнаглеет,
То он в привате (private) совсем оборзеет:
Дёргать посмеет за то (that) и за это (this),
Пока не получит по морде (interface) он где-то
class Zemlyanin
{
private:
// Методом, что был случайно объявлен,
void* dontTouchThat()
{
// Но результатом никак не проявлен.
return NULL;
}
};
Способ дерьмовый, скажу я вам честно —
В интимные функции лезть всё ж не лестно.
Так что давайте не углубляться
И в рамках публичности (public) всё ж оставаться.
Встречал и таких, кто не понимает,
Что в паблик (public), порой, не то выставляет,
Кто лезет в приват (privat) и тянет щипцами
За то, что сделает нас потом лишь врагами.
Я верю, мы с вами люди приличные!
И программисты будем отличные!
Забудем о них и спокойно продолжим —
Ведь я как-никак подвох ещё должен.
Вернёмся к началу: «Пока (где всё честно);».
Время настало для интересного:
Засуну-ка я себя в эту вечность
И жизнь проживать буду беспечно:
Zemlyanin i = new Zemlyanin(“серые глаза”);
while (true);
{
// Начну я с того, что найду здесь друзей.
var friends = i.LookingForFriends();
// Если нашлись,
if ((friends != null) && (friends.Count > 0)) {
// То жить веселей!
i.GoOutWithFriends(friends);
}
}
Запустил я программу — зависла надолго.
От поисков что-то не видно мне толка.
Заметил ли ты, дорогой мой читатель,
В программе где той накосячил создатель?
Ошибка простая — всего один знак —
И жизнь «ай» Землянина наперекосяк!
До поисков дружбы ему не дойти,
Ведь тчк-зпт (semicolon) не превзойти!
Коварную точку ту с запятой
Я уберу властной рукой!
Zemlyanin i = new Zemlyanin(“серые глаза”);
while (true) {
var friends = i.LookingForFriends();
if ((friends != null) && (friends.Count > 0)) {
i.GoOutWithFriends(friends);
}
}
Всё! Класс!
Запускаем!
И снова
Офигеваем…
Теперь бесконечность проводим в тусовке:
И ночью, и днём, и без остановки!!!
Того ли хотел от нас наш создатель?
Какой-то он, что ли, недоброжелатель?
Пока мы млады, без самоконтроля,
Пожалуй, нужна нам внешняя воля.
Но истину (true) ложью (false) не буду скрывать,
А лишь тормоза (break) пойду добавлять.
Условий возможных не перечесть,
Но можно хотя бы время учесть.
// Начало тусовки мы засекаем,
var now = DateTime.Now;
long startTicks = now.Ticks;
// Время в заметках себе сохраняем,
Console.WriteLine(now);
// 5 секунд на движуху всё ж разрешаем
long endTicks = startTicks + 10000 * 1000 * 5;
Zemlyanin i = new Zemlyanin(“серые глаза”);
// И снова отважно в вечность ныряем!
while (true) {
var friends = i.LookingForFriends();
if ((friends != null) && (friends.Count > 0)) {
i.GoOutWithFriends(friends);
}
// Если тусили достаточно долго,
now = DateTime.Now;
if (now.Ticks > endTicks) {
Console.WriteLine("{0} - Пора меру знать. На выход! И только!", now);
break;
}
}
Фух! Жизнь «ай» Землянина вновь завершилась,
Хоть мало чего у него приключилось…
Бедный создатель, мне его жалко:
Вечно в колёса суют ему палки.
Вот как так творить? Мне не понятно!
Правда, порою, очень занятно.
А сколько всего тут надо учесть,
Чтобы беды на «объект» не навлечь…
// В цикле моём косяков (todo) ещё тьма,
while (true) {}
// Но оставлю их вам для разминки (fix) ума.
// И интерфейс бы продумать (define) там надо,
// Чтоб прилетала (implement) в private лишь награда.
Но суть этой басни вовсе не в том,
Кто с кем, зачем, и что будет потом.
Мораль здесь простая, запомнить не сложно:
Со знаками надо быть осторожным;
Решайте, что в public вы миру несёте,
Да и кому свой private отдаёте;
Запомните всё ж, что вселенская вечность,
Порой, не прощает нам нашу беспечность…
То был косяк, а вот вам подвох.
// У
while (true);
// Другой смысл быть мог:
// Быть верным себе до скончанья времён,
// Не боясь ни объектов (i), ни перемен (var).
— Сам ли такой?
— Нет, — я скажу.
Я лишь сижу и пишу ерунду.
Хоть языков тех и много я знаю,
Только вот как-то пока не летаю…
Надеюсь, вам чуточку было занятно
Побыть с программистом таким непонятным,
Кто втирал вам опять не́весть о чём,
Да ещё и на ша́рпе (C#) с плюсами (С++) при том.
Если понравится это творенье,
Отправлю Землянина я в приключенья!
i.WishYou(“Разрешить все сомненья!”);
Error: undefined WishYou // Ошибка в определеньи!
P.S.
Хотите проверить: наврал или нет?
Вот вам онлайновый Fiddle .Net: https://dotnetfiddle.net/
using System.Collections.Generic; // Надо сверху добавить,
А двойные кавычки на английском поставить.
P. P. S.
АТ мой форматинг (formatting) жутко сбивает.
Пусть программисты (software developers) меня не ругают.
Я честно старался отступы делать,
Но я не фронтэнд (frontend) инженер, что поделать.