Регистрация
26.05.2020
Сообщения
495
Благодарностей
172
Баллы
43
Оператор goto позволяет переместить выполнение програмы в другое место кода. Zenno-аналогом являются стрелочки от кубика к кубику. С помощью стрелочки мы можем перевести выполнение шаблона в любое удобное место - тоже самое делает оператор goto
Как в коде дать понять боту, какое должно быть следующее действие после успешного выполнения блока goto?
К примеру, есть кусок кода, который выполняется в определенном месте (допустим, в начале работы шаблона), затем нужно его повторить, но уже в контексе отработки середины шаблона... Следующий код будет уже другим же...
Добавить switch с переменной step (как пример)?
 

tanichev

Client
Регистрация
14.08.2020
Сообщения
654
Благодарностей
761
Баллы
93
Как в коде дать понять боту, какое должно быть следующее действие после успешного выполнения блока goto?
К примеру, есть кусок кода, который выполняется в определенном месте (допустим, в начале работы шаблона), затем нужно его повторить, но уже в контексе отработки середины шаблона... Следующий код будет уже другим же...
Добавить switch с переменной step (как пример)?
Нет, абстрагируйтесь от начала и конца,шаб на 99.9% выполнения может вернуться например на 9%. % это я образно.
 

radv

Client
Регистрация
11.05.2015
Сообщения
3 788
Благодарностей
1 952
Баллы
113
когда же я освою , C#? )))
4й год с "зенкой" , с десяток уже купленных,подаренных и скаченных курсов...)))
надо себя заставить ))

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

vadim4ukr

Client
Регистрация
10.06.2016
Сообщения
222
Благодарностей
48
Баллы
28
Можно говорить, что есть много доступной информации в специализированной литературе или на ютубе - но по факту 90% новичков, включая меня, ничего полезного из той тучи доступной инфы для себя не могут взять, так как для того чтоб что-то взять полезное, нужно понимать для чего оно тебе и где ты его потом сможешь применить, потому на деле же никто и не лопатит те горы доступной инфы потому что банально не понимают из чего начать.

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

Да это не очередной дейтинг/крипто/nft бот - но как по мне, полезно и годно. Автору спасибо за старания.
 
  • Спасибо
Реакции: Brabus_bots

Brabus_bots

Client
Регистрация
13.04.2019
Сообщения
788
Благодарностей
541
Баллы
93
К примеру, есть кусок кода, который выполняется в определенном месте (допустим, в начале работы шаблона), затем нужно его повторить, но уже в контексе отработки середины шаблона...
Если я правильно понял Ваш вопрос, то ответом на него будет не оператор goto. Повторяющиеся куски кода принято выносить за скобку. В рамках зенопостера это можно реализовать с помощью блока "Директивы using и общий код" - "Общий код"

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

Далее вы в c# кубике можете в одну строчку кода обратится к функции по её названию, вместо того чтобы дублировать её код.

Пример из практики
У меня в ботах частенько есть проверка прокси на дисконнект перед выполнением важных пост/гет запросов. Чтобы постоянно не вставлять этот 10ти строчный блок кода для проверки прокси - я 1 раз написал эти 10 строк в разделе "Общий код", объеденил их в функцию и уже в своих c# кубиках обращаюсь к этой функции по её названию.


92019

92020



Еще хороший пример привел товарищ @SHILY в своём комментарии:

В его примере показано, как он создал 2 функции(метода) с названиями GetTextFromSite и Print и обратился к ним по их названию.

Пример использования функций вместо дублирования кода:
int summ(int number1, int number2) {
    int number3 = number1 + number2;
    return number3;
}
//тут строка какого-то кода
//тут строка какого-то кода

//а вот в этом месте кода нам понадобилось сложить 2 числа
int random_number1 = summ(3,4);
project.SendInfoToLog(random_number1.ToString()); //выводим результат в лог и получаем 7

//тут строка какого-то кода
//тут строка какого-то кода

//а вот в этом месте кода нам понадобилось сложить 2 числа
int random_number2 = summ(5,11);
project.SendInfoToLog(random_number2.ToString()); //выводим результат в лог и получаем 16
Возможно возникнет мнение: "И что, одну строчку кода сэкономили?". Это всего лишь демонтстрация) У меня есть функции, которые состоят из 500-2000 сток кода, а в реальных проектах в IT компаниях это могут быть десятки тысяч строк кода.
 
Последнее редактирование:
  • Спасибо
Реакции: Андрейка2020

SHILY

Client
Регистрация
05.06.2016
Сообщения
258
Благодарностей
307
Баллы
63
когда же я освою , C#? )))
4й год с "зенкой" , с десяток уже купленных,подаренных и скаченных курсов...)))
будь неладен этот nocode!)))
Автору спасибо ,почитал , замотивировался и дал себе опять обещание начать изучение c# ... но c понедельника)
зы Реально, ещё раз спасибо за статью!
Никогда не понимал зачем оно нужно, пока на проекте не случилась жопаболь и решалось всё только кодом...
В итоге, сам не знаю как оно всё точно вышло, но, благодаря зенке, на данный момент, я - программист:D
 

usawa0

Client
Регистрация
29.11.2019
Сообщения
59
Благодарностей
22
Баллы
8
Да ладно, я же по существу говорю.
Ведь есть статьи с прошлых конкурсов в которых до сих пор сохраняется актив, так как раскрываются какие то интересные варианты решений тех или иных потребностей.
Да ну что говорить чего только стоит великолепная статья от WLDN
" Автоматизация Android без посредников " и это 2020 год!
Вот что и подобное хочется видеть в конкурсах статей, а не Hello world на С#....
Год назад искал подобную статью, пока сам не стал изучать шарпы. Тут не только информация из гугла, но и на реальном примере показано, что именно из C# используется в реальном Zenno приложении.
 
  • Спасибо
Реакции: Brabus_bots

sergio197675

Client
Регистрация
21.09.2019
Сообщения
360
Благодарностей
318
Баллы
63
Никогда не понимал зачем оно нужно, пока на проекте не случилась жопаболь и решалось всё только кодом...
В итоге, сам не знаю как оно всё точно вышло, но, благодаря зенке, на данный момент, я - программист:D
пока "жопоболь" лечится гуглением для поиска готовых сниппетов/примеров на C#, с правкой под себя ....а так чтобы с нуля и в "общий код" , "методы "и др особенности - ну ни как пока "нужда не заставила" ... просто нет времени на это вот всё , хоть тресни((
 
Последнее редактирование:

Brabus_bots

Client
Регистрация
13.04.2019
Сообщения
788
Благодарностей
541
Баллы
93
пока "жопоболь" лечится гуглением для поиска готовых сниппетов/примеров , с правкой под себя ....а так чтобы с нуля и в "общий код" , "методы "и др особенности - ну ни как пока "нужда не заставила" ... просто нет времени на это вот всё , хоть тресни((
Палка с двумя концами) В айти среде популярно мнение, что заказчику (частенько заказчик - это ты сам) вообще по барабану насколько у тебя там красивый код и какие технологии ты использовал, мол заказчик согласен на код из г*овна и палок, если он работает и не ломается.

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

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

Моё мнение, что нужно учиться ловить баланс между этими двумя концами палки:-)
 
  • Спасибо
Реакции: sergio197675
Регистрация
23.03.2015
Сообщения
1 218
Благодарностей
751
Баллы
113
Вот это ни хрена себе. Кладём в закладки и читаем внимательно внимательно
 
  • Спасибо
Реакции: Brabus_bots

gomoney

Client
Регистрация
27.09.2009
Сообщения
124
Благодарностей
37
Баллы
28
int, string понятно, а как добавить в массив свой вариант?

var domains = new []{ "vk.com", "top-fwz1.mail.ru", "сюда_свою_переменную" };
 

Brabus_bots

Client
Регистрация
13.04.2019
Сообщения
788
Благодарностей
541
Баллы
93
int, string понятно, а как добавить в массив свой вариант?

var domains = new []{ "vk.com", "top-fwz1.mail.ru", "сюда_свою_переменную" };
Можно сделать вот так
C#:
string newDomain = "google.com";

string[] domains = {"vk.com", "top-fwz1.mail.ru", newDomain};

Или даже вот так
C#:
string newDomain = "google.com";

string[] domains = new string[3];

domains[0] = "vk.com";
domains[1] = "top-fwz1.mail.ru";
domains[2] = newDomain;
 
  • Спасибо
Реакции: gomoney
Регистрация
26.05.2020
Сообщения
495
Благодарностей
172
Баллы
43
Если к переменным проекта можно обращаться в любом кубике, то переменные C# видны только в том кубике, где они были созданы.
очень важное замечание, благодарю!
 
Регистрация
26.05.2020
Сообщения
495
Благодарностей
172
Баллы
43
Если я правильно понял Ваш вопрос, то ответом на него будет не оператор goto. Повторяющиеся куски кода принято выносить за скобку. В рамках зенопостера это можно реализовать с помощью блока "Директивы using и общий код" - "Общий код"

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

Пример из практики
У меня в ботах частенько есть проверка прокси на дисконнект перед выполнением важных пост/гет запросов. Чтобы постоянно не вставлять этот 10ти строчный блок кода для проверки прокси - я 1 раз написал эти 10 строк в разделе "Общий код", объеденил их в функцию и уже в своих c# кубиках обращаюсь к этой функции по её названию.


Посмотреть вложение 92019
Посмотреть вложение 92020


Еще хороший пример привел товарищ @SHILY в своём комментарии:

В его примере показано, как он создал 2 функции(метода) с названиями GetTextFromSite и Print и обратился к ним по их названию.
то, что и интересовало!
 
  • Спасибо
Реакции: Brabus_bots

Brabus_bots

Client
Регистрация
13.04.2019
Сообщения
788
Благодарностей
541
Баллы
93
то, что и интересовало!
Вообще я хотел это рассказать в следующих статьях) Разобрал небольшой пример. Мы создали функцию которая делает простое действие - складывает два числа.

Функция имеет название summ, на вход она принимае 2 числа с типом int, которые я назвал number1 и number2
Сама функция тоже имеет тип int, а если быть точнее - это не тип функции имеет тип int, а тип данных которая она выдаст на выходе.

Пример использования функций вместо дублирования кода:
int summ(int number1, int number2) {
    int number3 = number1 +  ;
    return number3;
}
//тут строка какого-то кода
//тут строка какого-то кода

//а вот в этом месте кода нам понадобилось сложить 2 числа
int random_number1 = summ(3,4);
project.SendInfoToLog(random_number1.ToString()); //выводим результат в лог и получаем 7

//тут строка какого-то кода
//тут строка какого-то кода

//а вот в этом месте кода нам понадобилось сложить 2 числа
int random_number2 = summ(5,11);
project.SendInfoToLog(random_number2.ToString()); //выводим результат в лог и получаем 16
Возможно у кого-то возникнет мнение: "И что, одну строчку кода сэкономили?". Это всего лишь демонтстрация) У меня есть функции, которые состоят из 500-5000 строк кода, а в реальных проектах в IT компаниях это могут быть десятки тысяч строк кода.
 

radv

Client
Регистрация
11.05.2015
Сообщения
3 788
Благодарностей
1 952
Баллы
113
и желающим освоить C# на нормальном/продвинутом уровне, не важно в зенке выего будете использовать или нет, не пожалейте времени на изучение самых основ (можно смотреть любой курс по шарпу с ютуба), а потом уже будете писать свой код. Сначала небольшие сниппеты, потом портянки из длинного кода, потом будете разбивать на отдельные методы для удобства работы из общего кода. Не пытайтесь сразу все сделать идеально, по мере роста, будете не один раз оптимизировать (рефакторить) свой код, это нормально. Как освоите основы, то сможете использовать методы зенно или методы из сторонних dll. Главное понимание и упорство. :az:
 
  • Спасибо
Реакции: Kulya и Brabus_bots

Brabus_bots

Client
Регистрация
13.04.2019
Сообщения
788
Благодарностей
541
Баллы
93
не пожалейте времени на изучение самых основ
Сначала небольшие сниппеты
потом портянки из длинного кода
потом будете разбивать на отдельные методы
для удобства работы из общего кода
будете не один раз оптимизировать (рефакторить) свой код
сможете использовать методы зенно
или методы из сторонних dll
Почти совпал план обучение с моим потенциальным планом статей для форума:D

Присоединяюсь к сказанному и чутка дополнений от себя - всегда теорию подкрепляйте практикой
 

radv

Client
Регистрация
11.05.2015
Сообщения
3 788
Благодарностей
1 952
Баллы
113
всегда теорию подкрепляйте практикой
Дополню. Не пытайтесь сначала выучить всю теорию, она со временем забывается, особенно если не пользуетесь изученным. А вот то что закрепляете практикой, то запоминается надежнее, понимается лучше и вспоминается быстрее. Когда пишите свой код, дополняйте его комментариями для себя, почему и зачем именно так сделали. да это будет занимать время и писать код будете дольше, но зато потом легче будет понимать что к чему и вносить правки в этот код (особенно когда давно написали этот код и давно его не открывалиmb забыли, как все работает), а как наберетесь опыта, то и комментариев будете делать меньше, и даже чужой код без них сможете читать. :az:
 
  • Спасибо
Реакции: Brabus_bots

_HEDELKA_

Client
Регистрация
20.02.2022
Сообщения
648
Благодарностей
170
Баллы
43
Получается твоя статья лучше моей?(
 

Brabus_bots

Client
Регистрация
13.04.2019
Сообщения
788
Благодарностей
541
Баллы
93
Получается твоя статья лучше моей?(
Откуда такие выводы? Я бы не стал оценивать по критериям "лучше/не лучше") Сам для себя я оцениваю статьи по необходимости информации в данный конкретный момент.

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

_HEDELKA_

Client
Регистрация
20.02.2022
Сообщения
648
Благодарностей
170
Баллы
43
Откуда такие выводы? Я бы не стал оценивать по критериям "лучше/не лучше") Сам для себя я оцениваю статьи по необходимости информации в данный конкретный момент.

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

_HEDELKA_

Client
Регистрация
20.02.2022
Сообщения
648
Благодарностей
170
Баллы
43
Откуда такие выводы? Я бы не стал оценивать по критериям "лучше/не лучше") Сам для себя я оцениваю статьи по необходимости информации в данный конкретный момент.

Именно по этой причине, я отдам свой голос не своей статье, т.к. пару соседних мне показались очень интересными (можно ли вообще за свою статью голосовать?)
У тебя по комментария и просмотрам можно понять что статья актуальная для коллег, в моем случае просто не стандартное использование/совмещение зенки с конструктором
 
  • Спасибо
Реакции: Brabus_bots

fridayman

Client
Регистрация
25.03.2018
Сообщения
169
Благодарностей
260
Баллы
63
Не ради хайпа, но чтобы засвидетельствовать свое почтение и благодарность за такой годный материал, низко кланяюсь. Совсем недавно начал изучать C# и такой ликбез мне как воздух нужен.:ay:
 
  • Спасибо
Реакции: Brabus_bots и vadim4ukr

GeGold

Client
Регистрация
28.09.2015
Сообщения
778
Благодарностей
370
Баллы
63
Всем доброго !

Хотел сделать 2а и более кубика Замена в один код С#
Выполняется только одна замена


string text = project.ExecuteMacro(project.Variables["blok_h2"].Value); // Текст для обработки
project.Variables["blok_h2"].Value = Macros.TextProcessing.Replace(text, "<b>", "", "Regex", "All"); // Обработка текста "Замена"
project.Variables["blok_h2"].Value = Macros.TextProcessing.Replace(text, "</b>", "", "Regex", "All"); // Обработка текста "Замена"
return project.Variables["blok_h2"].Value;

Где ошибся ?

Upd.немного доделал и всё получилось


string text = project.ExecuteMacro(project.Variables["blok_h2"].Value); // Текст для обработки
text = Macros.TextProcessing.Replace(text, "<b>", "", "Regex", "All"); // Обработка текста "Замена"
text = Macros.TextProcessing.Replace(text, "</b>", "", "Regex", "All"); // Обработка текста "Замена"
return text;

upd2
Возникла другая трабла - через замену решил экранировать скобки и не срабатывает



string text = project.ExecuteMacro(project.Variables["blok_h2"].Value); // Текст для обработки
text = Macros.TextProcessing.Replace(text, "<b>", "", "Regex", "All"); // Обработка текста "Замена"
text = Macros.TextProcessing.Replace(text, "</b>", "", "Regex", "All"); // Обработка текста "Замена"
text = Macros.TextProcessing.Replace(text, ")", "\)", "Text", "All");
return text;

Как я понимаю скобки надо как-то по-особенному оборачивать, вопрос как ??? ))))
 
Последнее редактирование:

Brabus_bots

Client
Регистрация
13.04.2019
Сообщения
788
Благодарностей
541
Баллы
93
Как я понимаю скобки надо как-то по-особенному оборачивать, вопрос как ??? ))))
Попробуйте собачку добавить

C#:
string text = project.ExecuteMacro(project.Variables["blok_h2"].Value); // Текст для обработки
text = Macros.TextProcessing.Replace(text, "<b>", "", "Regex", "All"); // Обработка текста "Замена"
text = Macros.TextProcessing.Replace(text, "</b>", "", "Regex", "All"); // Обработка текста "Замена"
text = Macros.TextProcessing.Replace(text, ")", @"\)", "Text", "All");
return text;
 
  • Спасибо
Реакции: GeGold

GeGold

Client
Регистрация
28.09.2015
Сообщения
778
Благодарностей
370
Баллы
63
Попробуйте собачку добавить

C#:
string text = project.ExecuteMacro(project.Variables["blok_h2"].Value); // Текст для обработки
text = Macros.TextProcessing.Replace(text, "<b>", "", "Regex", "All"); // Обработка текста "Замена"
text = Macros.TextProcessing.Replace(text, "</b>", "", "Regex", "All"); // Обработка текста "Замена"
text = Macros.TextProcessing.Replace(text, ")", @"\)", "Text", "All");
return text;
Всё сработало , спасибо
 
  • Спасибо
Реакции: Brabus_bots

Mikhail B.

Client
Регистрация
23.12.2014
Сообщения
14 415
Благодарностей
5 454
Баллы
113
Покидайте по больше примеров использования массива, не совсем понимаю в каких случаях он может пригодится.
 
  • Спасибо
Реакции: seodamage

Mikhail B.

Client
Регистрация
23.12.2014
Сообщения
14 415
Благодарностей
5 454
Баллы
113
Спасибо за статью, 80% знал. Массивы решил пропустить)) Мутно сложно нихочу :D, но + - понятно. Потом можно доучить.
 
  • Спасибо
Реакции: Brabus_bots

fridayman

Client
Регистрация
25.03.2018
Сообщения
169
Благодарностей
260
Баллы
63
Покидайте по больше примеров использования массива, не совсем понимаю в каких случаях он может пригодится.
Посмотрите плейлист с уроками по C# от SimpleCode, рекомендую настоятельно и безотлагательно. Мне понадобилось несколько дней непрерывного изучения (на скорости x1.5), чтобы получить максимальное понимание всего того, что нужно для работы со своими проектами.
 

radv

Client
Регистрация
11.05.2015
Сообщения
3 788
Благодарностей
1 952
Баллы
113
Посмотрите плейлист с уроками по C# от SimpleCode, рекомендую настоятельно и безотлагательно. Мне понадобилось несколько дней непрерывного изучения (на скорости x1.5), чтобы получить максимальное понимание всего того, что нужно для работы со своими проектами.
Согласен. хорошие уроки с понятным объяснением и главное не длинные )
 
  • Спасибо
Реакции: Mikhail B. и fridayman

Кто просматривает тему: (Всего: 2, Пользователи: 0, Гости: 2)