LINUXTALKS.CO

Что действительно поражает в современном программировании? 2023 год. ✔️✅➡️❌

 , , , ,

L


0

1

Больше чем ИИ, поражает возможность вставлять в код эмодзи. Мне сейчас 33 года, в программировать я начал в 11 или 12 лет, на basic. У меня тогда сложились определённые представления и привычки, и вставка эмодзи в код диссонирует с ними. Но сама такая возможность многое упрощает.

func processDialog(dialogS DialogSettings, request tgRequest, InputChan <-chan tgRequest, AnswersChan chan<- tgRequest) {
	// Горутина принимает: Настроки диалога, конкретный запрос на который надо ответить, канал через который принимает сообщения пользователя и канал в который посылает ответы на сообщения.
	var count float64 // Количество товара
	var err error
	var Answer tgRequest
	var vendorCode string
	var resultCommand string

	if dialogS.NameDialog == dialogReserveCount { // Резервирование или снятие с резерва
		vendorCode = dialogS.Good.VendorCode                               // Артикул товара
		request.MessageReplyID = 0                                         // Что бы не ссылаться на конкретное сообщение.
		request.Responses = append(request.Responses, dialogS.Description) // Добавление описания
		if dialogS.ReservationFlag > 0 {                                   // резервирование
			request.Responses = append(request.Responses, fmt.Sprintf("Сколько товара %s зарезервировать?", vendorCode))
		}
		if dialogS.ReservationFlag < 0 { // Снятие с резерва
			request.Responses = append(request.Responses, fmt.Sprintf("Сколько товара %s снять с резерва?", vendorCode))
		}
		Answer.tgKeyboard = addInlineKeyboardRow(Answer.tgKeyboard, []string{fmt.Sprintf("❌ Отмена ввода.")}, []string{"cancel"})
		AnswersChan <- request // Отправка этих текстов.
		for Answer.StopGo {    // Типа для выхода, но буду использовать break
			Answer = <-InputChan                                 // Принимаем сообщения, ожидание.
			if Answer.TextRequest == "cancel" || Answer.StopGo { // Досрочный выход
				if Answer.StopGo {
					Answer.Responses = append(Answer.Responses, "Диалог остановлен. "+menuCommand)
				} else {
					Answer.Responses = append(Answer.Responses, "Операция отменена. "+menuCommand)
				}
				Answer.tgKeyboard = addInlineKeyboardRow(Answer.tgKeyboard, []string{"➡️ Продолжить..."}, []string{dialogS.CancelCommand})
				Answer.CloseRequest = true
				AnswersChan <- Answer
				return
			}
			if Answer.TextRequest == "ok" { // Число подтверждено
				if count != 0 { // Число получено
					break
				} else { // Число не получено
					if err == nil { // Число не должно быть нулём
						Answer.Responses = append(Answer.Responses, "Число не должно быть нулём.")
					}
				}
			}
			if count == 0 {
				count, err = strconv.ParseFloat(strings.ReplaceAll(Answer.TextRequest, ",", "."), 64)
				if err != nil { // Число не распознано
					Answer.Responses = append(Answer.Responses, "Число не распознано. Оно должно состоять из цифр.")
				}
			}
			if count != 0 {
				resultCommand = "/reservation " + vendorCode + " " + fmt.Sprintf("%g", count)
				Answer.Responses = append(Answer.Responses, "Если число распознано не верно, попробуйте ввести его ещё раз по другому.")
				Answer.tgKeyboard = addInlineKeyboardRow(Answer.tgKeyboard, []string{fmt.Sprintf("✅ Число %g распознано верно.", count)}, []string{"ok"})
				Answer.tgKeyboard = addInlineKeyboardRow(Answer.tgKeyboard, []string{"❌ Отмена ввода."}, []string{"cancel"})
			}

			if Answer.Responses != nil {
				if len(Answer.Responses) > 0 { // Есть чем отвечать
					AnswersChan <- Answer
				}
			}

		}
		if len(resultCommand) > 0 { // Пользователь таки ввёл число
			Answer.CloseRequest = true // Перестать перенавправлять сообщения в эту горутину.
			Answer.Responses = append(Answer.Responses, "Синтезирована команда:"+resultCommand)
			Answer.tgKeyboard = addInlineKeyboardRow(Answer.tgKeyboard, []string{fmt.Sprintf("✔️ Зарезервировать %g едениц товара %s.", count, vendorCode)}, []string{resultCommand})
			Answer.tgKeyboard = addInlineKeyboardRow(Answer.tgKeyboard, []string{"➡️ Продолжить..."}, []string{dialogS.CancelCommand})
			AnswersChan <- Answer // Ответ с кнопкой в которой сформированная команда.
		}

	}

}

Ну и конечно ответы chatGPT выполняют роль психологической поддержки:

Ваша функция выглядит хорошо и включает в себя логику обработки диалога с пользователем по резервированию товара. Здесь некоторые замечания и рекомендации:

Похоже, что вы используете break для выхода из цикла. Использование break в данном контексте вполне допустимо, но будьте внимательны при использовании break в более сложных структурах кода, так как это может усложнить понимание логики выполнения программы.

Помните, что Answer.StopGo изначально будет равно нулю (по умолчанию), и в первой итерации цикла у вас не будет выхода. Возможно, вы захотите установить Answer.StopGo в true до входа в цикл, если есть определенные условия для досрочного выхода.

Обратите внимание, что вы проверяете len(Answer.Responses) > 0, но также может быть полезно проверить Answer.TextRequest != "" перед отправкой ответа, чтобы избежать отправки пустых сообщений.

Помните, что resultCommand не обнуляется в каждой итерации цикла, поэтому если len(resultCommand) > 0, вы будете выполнять этот блок кода после выхода из цикла. Рассмотрите возможность обнуления resultCommand перед использованием.

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

Эмодзи они же в юникоде, что тебя удивляет?

Я привык противопоставлять текст и графику. Кнопка с текстом и картинкой, сложнее чем кнопка только с текстом или только с картинкой. Привык к этому. Теперь же картинка - это как буква.

rezedent12    
★★★★★★
Windows / Firefox (RU)
Ответ на: комментарий от cocucka

Так это ж даже в ASCII было, только весьма примитивно в виде всяких там чёрточек для печатания таблиц.

Да, но то ограниченный набор и к тому же разный для разных кодировок. Юникод же - другое же дело.

rezedent12    
★★★★★★
Windows / Firefox (RU)
Ответ на: комментарий от serg002

Он это на бейсике пропустил :)

Я применял это. Но на Q-BASIC нельзя было такой символ вставить в код напрямую, без потенциально неизвестных последствий. До и «копировать-вставить», между программами было плохо в DOS. Поэтому всегда использовал коды, поныне помню что 34 код для кавычек, а 10 и 13 для перевода строки.

rezedent12    
★★★★★★
Последнее исправление: rezedent12 (всего исправлений: 1)

Windows / Firefox (RU)

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

Harald    
★★★★★★
Linux / Firefox (GE)
Ответ на: комментарий от Harald

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

Пусть телеграмм и тащит.

rezedent12    
★★★★★★
Linux / Chrome (RU)

программировать я начал в 11 или 12 лет, на basic

Почти также

У меня тогда сложились определённые представления и привычки…

Вопреки мнению смузи-снобов, все, кто начинал с васика, имхо, намного логичнее строят конструкции, чем те, кто начинас с «божественной сишечки». Было бы интересно посмотреть на твою писанину)

…и вставка эмодзи в код диссонирует с ними

Есть даже целый язык на одних только эмоджи. Имхо, ничем не хуже условного BrainFuck. Ну есть и есть. Не нравится, не пользуй. Оно так и так само сдохнет.

Но сама такая возможность многое упрощает.

Схераль? Чем эмоджи отличается от любой другой синтаксической конструкции?)

Ну и конечно ответы chatGPT выполняют роль психологической поддержки:

Баззворды ни о чем.

Oberstserj    
★★★★★★
Ubuntu / Firefox (NL)
Ответ на: комментарий от Oberstserj

Вопреки мнению смузи-снобов, все, кто начинал с васика, имхо, намного логичнее строят конструкции, чем те, кто начинас с «божественной сишечки». Было бы интересно посмотреть на твою писанину)

Ну я привёл фрагмент. Могу ещё привести:

https://pastebin.com/P1ppa3Dy

Схераль? Чем эмоджи отличается от любой другой синтаксической конструкции?)

Достаточно добавить эмоджи и пользователь уже не так сильно боится текстового интерфейса.

Баззворды ни о чем.

По крайней мере проверку функций по какому то абстратному «чек-листу» он делает.

rezedent12    
★★★★★★
Windows / Firefox (RU)