Отправляем E-mail с помощью Python
Я участвую в разработке одного проекта на работе. Мы разрабатываем прототипы Raspberry Pi и специальное программное обеспечение. Хоть и разработанное ПО работает блестяще, нам...
PEG парсеры и Python
Несколько лет назад кто-то спросил, имеет ли смысл переключать Python на парсер PEG. Или на грамматику PEG. Не помню точно. Тогда я ещё не...
Формирование эффективной и целостной культуры ревью кода
Погрузимся в различные ситуативные контексты ревью кода, рассмотрим их цели и содержание. На основе полученных знаний сформулируем рекомендации для авторов и рецензентов, позволяющих улучшить процесс ревью.
Kotlin-реализация RecyclerView на Android
RecyclerView - улучшенная замена устаревшего и во многом несовершенного ListView. С помощью этого краткого обзора вы легко сможете создать свой собственный пользовательский RecyclerView.
Почему микросервисы нужны каждому разработчику
Изучим преимущества и недостатки микросервисов: как здесь создается, развертывается и сопровождается ПО, определяются границы сервисов. Разберем стратегии надежной микросервисной архитектуры.
Как стать Android-разработчиком за 2 месяца
Хотите всего за пару месяцев научиться разрабатывать приложения с нуля? Воспользуйтесь простым руководством для начинающих по созданию первого в жизни Android-приложения.
Что такого в языке Go?
Сегодня я хочу поговорить не о чем ином как о Golang. Как и в случае с Node.js, термин Golang встречается мне несколько раз в...
Популярные лайфхаки для Python
Эти крутые советы для Python сделают ваш код красивее
1. Распаковка элементов массива
first_name, last_name = print(first_name) #выводится Farhadprint(last_name) #выводится Malik
2. Обмен значений переменных
first_name, last_name = last_name,...
C++: подробное руководство по вложенным операторам If-Else
Разберем реальные сценарии и типичные ошибки использования if-else. Как уменьшить вложенность и какие имеются альтернативы?
Создание анимированных диаграмм в Python
Изображение вместо тысячи слов - такой принцип лежит в основе визуализации данных. А если добавить в нее анимацию? Представляете, какой живой отклик она вызовет у вашей аудитории! Так что самое время научиться создавать анимированные диаграммы в Python.
10 рекомендаций, которые повысят производительность разработки на Flutter в 2023 году
Flutter предлагает множество функций и инструментов, которые могут значительно повысить производительность при разработке мобильных приложений. Предлагаем подробное руководство по использованию этих возможностей.
Эти декораторы Python позволят сократить код вдвое
Декораторы - интересный, мощный и полезный инструмент, способный значительно сокращать и структурировать код Phyton. Убедитесь в этом сами.
Как создать чат-бот ChatGPT с пользовательской базой знаний
Предлагаем пошаговое руководство по созданию собственного ChatGPT с пользовательскими источниками данных. Такой чат-бот справится с выполнением многих реальных бизнес-кейсов, включая поддержку клиентов и классификацию спама.
Ловушка для горутины
Горутина — это эффективный и легковесный механизм многопоточного выполнения, популярный среди разработчиков Go. С помощью семантики горутин программисты добиваются эффективного выполнения параллельных процессов в программе. Впрочем,...
7 наиболее полезных расширений VS Code, представленных в 2021 году
Представляем самые крутые расширения VS Code, выпущенные в 2021 году. Они помогут разработчикам расширить рабочий процесс и повысить продуктивность.
Пора отказаться от “@Input” и “@Output” в Angular
Ознакомьтесь с реализацией входов модели - новшества, введенного в Angular 17.3 для упрощения двунаправленной привязки данных. Отказ от традиционных декораторов @Input() и @Output() и принятие директивы @model позволит улучшить читаемость, сопровождаемость и общую реактивность Angular-приложений.
Реализация параллакс-карусели из SwiftUI в Jetpack Compose
Можно ли перевести захватывающую параллакс-карусель с SwiftUI на Jetpack Compose? Следуя предложенному руководству, вы успешно осуществите эту идею, убедившись в гибкости и функциональных возможностях Jetpack Compose.
Rust: выполнение HTTP-запросов и обработка ответов с помощью reqwest
Изучим запросы GET и POST, отображение HTTP-ответа на предопределенную структуру и нюансы обработки различных кодов состояния HTTP. Весь код - в репозитории GitHub.
Почему все говорят о Zig?
Рассмотрим функционал этого языка системного программирования с точки зрения разработчика из управляемых языков. Сравним с ними Zig и разберемся, в чем его уникальные преимущества.
Результаты опроса разработчиков Angular в 2023 году
Ознакомьтесь с инициативами сообщества Angular, высказанными в опросе 2023 года. Многие из них были учтены в дорожной карте Angular на 2024 год, нацеленной на улучшение опыта разработчиков и повышение производительности фреймворка.
Реализация структурированной конкурентности в Java и Kotlin
Направим наш пытливый ум в область изучения структурированной конкурентности, рассмотрим принципы ее реализации в Kotlin и Java, а по итогам научимся легко и безопасно запускать несколько программ.
Создание расширяющих методов на C#
Рассказываем, что такое расширяющие методы и как с их помощью можно дополнять функциональность классов без их изменения.
JAVA: разница между параметрами JVM -D, -X, -XX
Разберемся, когда применяются эти опции и чем отличаются. Изучим основные их категории и способы поиска различных элементов конфигурации, поддерживаемых виртуальной машиной Java.
12 актуальных идей для портфолио Python: веб-сайты, аналитика данных, автоматизация и парсинг
Анализатор настроения, виртуальный ассистент, бот-трейдер, компьютерное зрение - лучшие идеи для pet-проекта или стартапа на Python!
Чистая реализация структуры проекта на Go
Изучим модульную структуру проекта для тестируемого и сопровождаемого приложения Go, которое создается по принципам чистой архитектуры. Используя веб-фреймворк Gin и базу данных MongoDB, сделаем простой REST API с функционалом регистрации, авторизации пользователей и управления их профилями.
Конвейер BitBucket CI/CD для синхронизации веток с GitHub
Зачастую возникает необходимость синхронизировать ветки между двумя различными репозиториями — например, репозиторий BitBucket и репозиторий GitHub.
Это распространенный сценарий при работе с облачным репозиторием, но...
Как написать на Java функцию, подобную sizeof в C
В качестве упражнения реализуем функцию sizeOf() на Java, чтобы без проблем получать размеры разных типов данных, как в C.
Компилируем меньше с SOLID
Привет всем Android-разработчикам! Давайте разберем принципы SOLID, вернее, один из них.
Недавно я углубился в SOLID и нашел один скрытый потенциал. Теперь хочу рассказать про...
Использование Kotlin Flow для отображения наблюдаемого состояния UI на экране в Android
Узнайте, что такое реактивное программирование и как оно реализуется в Android с помощью Kotlin Flow. Понимание разницы в использовании различных типов Flow позволит создавать отзывчивые, неблокирующие и реактивные пользовательские интерфейсы.
Rust: взгляд старого программиста
Так сложились обстоятельства, что у меня возник перерыв в работе, в который я решил переключиться на Rust. Название этого языка резонировало с моим настроением,...
Производительность в Jetpack Compose: стабильность и неизменяемость
Jetpack Compose - мощный набор инструментов для создания современных мобильных приложений. Рассмотрим особенности его работы с пропускаемыми и перезапускаемыми функциями, а также фактор стабильности и его роль в рекомпозиции.
Экспериментируем с битбордом и битовыми операциями в Unreal 4
Идея прототипа игры
Главный герой Таичи застрял в мире клеток. Он пытается найти выход и может передвигаться только, если мы поможем ему раскрасить клетки, указав...
7 советов по улучшению анализа данных в Python
#1: Pandas Profiling
Преимущества этого инструмента очевидны. Анимация ниже создана с помощью вызова метода df.profile_report():
С помощью этого инструмента можно с легкостью устанавливать и импортировать пакет...
Запись логов в Golang
Чем отличаются диагностические сообщения модуля log от функций fmt: Print, Panic, Fatal? Разберем настройку формата логов.
Загрузочные представления в SwiftUI
Загрузочные представления являются одним из типичных компонентов приложения, и в этой статье вы научитесь грамотно их создавать и использовать с возможностью кастомизации.
Зачем Python столько знаков подчеркивания?
Неочевидные примеры использования символа нижнего подчеркивания для обеспечения инкапсуляции и улучшения читаемости вашего кода на Python
Почему вам стоит написать свой API-шлюз с нуля
Любой организации, имеющей в своем распоряжении пару микросервисов, необходим контроль за тем, кто получает к ним доступ и на каких условиях. Такой контроль помогает...
Поврежден жесткий диск? Python спешит на помощь!
Невероятная и поучительная история о том, как смекалистый программист спас результаты годовой работы с помощью простого скрипта на Python, когда все другие инструменты оказались бессильны.
Подробно об акторах в Swift
Чем акторы похожи на очереди и как ими решаются типичные проблемы параллелизма? Разберем на примерах эффективное применение акторов, опишем правила взаимодействия с ними.
Как отслеживать события файловой системы в Python
Прочитав эту статью, вы научитесь обнаруживать изменения в существующих файлах приложения Python. Для этого возьмем хорошо поддерживаемый модуль под названием watchdog.
Согласно официальной документации, watchdog...
9 советов, как выделиться среди Java-разработчиков
На протяжение десятилетий Java считается одним из самых популярных языков программирования. Все больше и больше людей желают освоить этот язык, из-за чего образуется сильная...
Kotlin изнутри: как работают inline-функции
Inline-функции могут как и увеличить код, так и повысить его производительность. Чтобы с выгодой использовать этот Kotlin-инструмент, необходимо понять принцип его действия, а заодно разобраться в том, зачем нужен crossinline и как работает reified.
C++: руководство по vector.erase
Разберем две разновидности метода и нюансы производительности. Рассмотрим типичные ошибки и реальные применения.
14 вопросов по валидациям на Ruby on Rails
Шпаргалка для собеседования по важной теме Ruby. Некоторые ответы снабжены примерами кода.
Асинхронный Rust: проблемы и способы их решения
В 2013 году я открыл для себя Rust и сразу решил изучить его, сделав своим основным языком программирования.
Через четыре года я переехал в Берлин...
Анимации с Matplotlib
Используем библиотеку matplotlib для создания интересной анимации
Изображение имитации дождя выполнено с помощью библиотеки Matplotlib, известной как прародитель пакетов для визуализации данных на python. Matplotlib...
Зачем использовать RTK Query для API-вызовов в React
Если для API-вызовов в React-приложениях вы все еще используете Redux, значит, вам пора ознакомиться с более продвинутым инструментом - RTK Query. Он облегчит вашу работу, избавив от необходимости вручную писать логику загрузки и кэширования данных.
Встроенная база данных Python
Если вы разработчик программного обеспечения, то, скорее всего, вы знакомы с невероятно легкой базой данных SQLite или даже уже использовали ее. Она содержит практически...
Шпаргалка Swift для разработчиков Android/Kotlin
Рассмотрим концепции Swift, обнаруживаемые при просмотре кода iOS, сравним их реализацию в Kotlin. Изучим, как здесь реализуется функционал опциональных привязок, словарей, расширений, структур, протоколов, анализируется код, просматриваются или пишутся технические спецификации/предложения.
Python: публикация ваших пакетов в PyPi
Примечание: исходный код можно найти на GitHub.
Если вы работаете с Python, то, вероятно, знаете о пакетах, которые можно загрузить и импортировать в свои проекты...
Продвинутые концепции Kafka для старшего инженера-программиста
Рассмотрим важный функционал: репликацию, избыточность данных, гарантии доставки, разбиение на разделы, управление смещениями, операции контроллера, эволюцию схем. Изучим расширенное применение Kafka, политики сжатия и хранения сообщений, сценарии Kafka Streams, безопасность и соответствие требованиям, мониторинг и наблюдаемость.
Лучшие практики разработки на Python
Хотите создать профессиональный Git-репозиторий для версионирования и обмена кодом Python? Предлагаем доступный гайд с перечнем инструментов, которые помогают организовывать код Python и поддерживать его в хорошем состоянии в соответствии с профессиональными стандартами.
Введение в линейное программирование на Python
Если ваша цель - получить максимум выгоды из имеющихся ресурсов, не тратя на поиск решения много времени, то воспользуйтесь линейным программированием. Это средство помогает оптимизировать задачи со множеством переменных и ограничений.
Лень писать игру на Rust одному? Позовите на помощь ChatGPT
На что способен ChatGPT? Заменит ли он в итоге программистов? Разберем его возможности на примере написания игры Pong и подумаем, не пора ли искать другую работу.
10 инструментов Python для работы с изображениями
Обзор самых популярных Python-библиотек с простым и понятным способом преобразования изображений
Введение
Наш сегодняшний мир переполнен данными, большая часть которых состоит из изображений. Однако для работы...
Модульное тестирование с помощью JUnit в Android
Тестирование — неотъемлемая часть полноценной разработки программного обеспечения. Сегодня рассмотрим фреймворк JUnit, а также функции и правила, которые помогут провести тесты Android-продукта на достойном уровне.
Хитрости объектно-ориентированного программирования. Часть 6 SLAP для функций
Это мини-серия статей по написанию поддерживаемого объектно-ориентированного кода без лишней нервотрепки.
Предыдущие части: Часть 1, Часть 2, Часть 3, Часть 4 и Часть 5.
Элементарные функции
Должен признать: очень долгое...
11 важнейших консольных команд для разработчика
Командная строка сильно облегчает нам жизнь, позволяя легко автоматизировать несколько рутинных задач и повысить плавность хода всего процесса. Вместо того, чтобы постоянно кликать повсюду...
10 языков программирования, которые пригодятся в 2023 году
Какие языки программирования стоит изучить в новом году? Ответ на этот вопрос поможет найти подборка из 10 самых популярных на сегодняшний день языков программирования.
Реализация масштабируемого и гибкого пользовательского экрана с несколькими переключателями на Swift
Посмотрим, как обрабатывать переключение между разными опциями в меню: пройдем путь от сравнительно простого решения к более универсальному и поддерживаемому, через рефакторинг.
Go — единственный выбор для бэкенд-разработчика?
Go впечатляет балансом свой простоты и мощи. Но можно ли его назвать "золотой клеткой" для бэкенд-разработчика? Способен ли он удовлетворить широкий спектр бэкенд-потребностей? Чтобы ответить на этот вопрос, оцените технические возможности языка Go.
Развертывание Cloud Functions в GCP с помощью Terraform
Как это: создавать инфраструктуру и управлять ей через конфигурационные файлы? Напишем и запустим простую Cloud Function, подробно разберем конфигурационные файлы среды развертывания со всеми объявлениями и определениями и узнаем, как применять изменения к реальной инфраструктуре.
Рекурсия и цикл, в чем разница? На примере Python
Цикл — это фундаментальный инструмент в программировании. Существует множество различных типов циклов, но почти все они выполнят одну базовую функцию: повторение определённых действий над данными, для...
Как оптимизировать набор текста с помощью Python
Набор текста давно превратился в неотъемлемую часть нашей повседневной рутины. Поэтому умение оптимизировать процесс ввода текста с клавиатуры приносит огромную пользу тем, кто большую...
C++: практическое руководство по множественным конструкторам
Изучим важные концепции - от простой перегрузки до сложных списков инициализаторов и делегирования конструкторов. Проиллюстрируем примерами, разберем нюансы и типичные ошибки.
Создание собственной симуляции активной материи на Python
Сегодня наша задача — создать симуляцию активной материи, т. е. роевое поведение. С помощью этой системы можно имитировать поведение стаи птиц или косяка рыб,...
Простое объяснение интерфейсов на Golang
Что общего у электророзеток с интерфейсами? Как создавать интерфейсы правильно? Попробуем понять этого непонятного зверя!
Навигация по ландшафту ИИ в 2024 году: тренды, прогнозы, возможности. Часть 2
2024-й обещает стать годом инноваций, когда ИИ и технологии объединятся, чтобы перекроить карты наших возможностей. Узнайте о катализаторах демократизации и персонализации ИИ, первых маркетплейсах для сервисов и агентов ИИ, новых моделях ценообразования и маркетинговых диджитал-стратегиях.
Разностный алгоритм Майерса и наблюдаемые свойства в Kotlin - как их объединить, чтобы облегчить жизнь разработчика
Посмотрите на анимацию ниже. Это группа разноцветных элементов, которые при нажатии кнопки начинают перемещаться. С точки зрения разработчика, эти элементы размещаются внутри RecyclerView с...
Синхронизация в Java. Часть 1
Прежде чем перейти к самой синхронизации, я объясню многопоточность на примере простого кода.
Первым классом будет класс “Countdown”, а класс “ThreadColor” будет выглядеть вот так:
public...
Как оркестровать микросервисы с помощью Docker Compose
Развертывание приложений с микросервисной архитектурой - довольно громоздкий процесс, занимающий много времени. Уменьшить рабочую нагрузку позволяет Docker Compose, инструмент оркестрации контейнеров. Рассказываем об упрощенном создании микросервисных приложений на Spring Boot.
K8s: топология подов
Как равномерно распределять поды по кластеру для эффективного использования его ресурсов и высокой доступности? Изучим мультиузловое/-зональное/-региональное распределение подов в его топологии.
Как решить реальную задачу при помощи структурированной конкурентности и виртуальных потоков Java 21
Любую сложную задачу можно разбить на простые. Особенно просто и естественно это делается в одном потоке выполнения кода. Но что делать в многопоточной среде, где отношения между конкурентно выполняемыми задачами хранит только ваша голова? Java 21 разгружает вашу голову идеей структурированной конкурентности. JDK позволяет явно выделить подзадачи (подстеки), чтобы затем получить общий итог работы подзадач. Смотрим, как это делается, на примере реальной задачи.
Создание API в R при помощи Plumber
Что это за инструмент - Plumber - и как с его помощью можно легко вывести собственное приложение R в продакшен-среду? Ответ на примере создания простого API.
Комбинации команд Unix/Linux, которые должен знать каждый разработчик
Экономьте свое время, используя комбинации команд в терминале и скриптах. Они полезны во многих ситуациях, в том числе при повторном выполнении команд, мгновенном переходе в только что созданный каталог и определении статуса долго выполняемой команды.
Веб-скрейпинг с нуля на Python: библиотека Beautiful Soup
Простое руководство для новичков в Data Science: извлечение данных из веб-сайтов с помощью Python-библиотек Beautiful Soup и requests.
Навигация в приложениях Flutter
Flutter — это продукт от Google, который используется для создания гибридных мобильных приложений на ЯП Dart.
Страница приложения Flutter — это Widget, который представляет собой описание изображенного пользовательского интерфейса....
Django Google SEO: поисковая оптимизация сайта на Python для индексации в Google
Показываем четыре простых шага для повышения рейтинга сайта в поисковой системе Google благодаря улучшению Django Search Engine Optimization.
Навигация по ландшафту ИИ в 2024 году: тренды, прогнозы, возможности. Часть 1
2024-й обещает стать годом инноваций, когда ИИ и технологии объединятся, чтобы перекроить карты наших возможностей. Заглянем в ближайшее будущее нейронных сетей, векторных данных, экосистемы агентов ИИ, а также уникальных смарт-девайсов, меняющих наш образ жизни.
6 рекомендаций по устранению типичных проблем производительности Java
Тщательно изучим проблемы производительности Java. Научимся выявлять и приоритизировать части кода с наибольшим влиянием на масштабируемость системы.
Обработка аргументов в Python с помощью argparse
Если вы хотите разрабатывать ПО на Python, то умение использовать argparse в своих скриптах будет крайне полезным. Если же вы специалист по данным, то,...
Python — идеальный инструмент для любой проблемы
Размышления о моей первой программе на Python.
Размышления это всегда помогающее (а иногда и развлекающее) занятие. Из ностальгических соображений, конечно, если можно испытывать ностальгию по...
Как дизассемблировать код Python и повысить его производительность
Базовое знакомство с простой, но эффективной техникой оптимизации кода через его дизассемблирование.
Что такое «мьютекс» и как им предотвращаются состояния гонки?
Покажем, как просто на Go реализуется мьютекс без состояния гонки и с корректной синхронизацией. Напишем пример с легкими, параллельно выполняемыми потоками-горутинами.
Насколько С++ быстрее Python
Есть миллион причин любить Python (особенно специалистам по данным). Но сильно ли он отличается от более профессиональных низкоуровневых языков программирования, таких как С или С++? Скорее всего, многие дата-специалисты или пользователи Python задавались этим вопросом или однажды задумаются об этом.
Кто на свете всех сильнее - Java, Go и Rust в сравнении
Мне показалось интересным провести сравнение между Java, Go и Rust. Речь идет не о бенчмарке, а о сравнении таких характеристик, как размер выходного исполняемого...
Освойте оконные функции SQL раз и навсегда
Пошаговое руководство по освоению оконных функций поможет решать различные задачи. Изучите на конкретных примерах, как оконные функции помогают выполнять агрегирование, ранжирование и смещения данных.
Событийно-ориентированная архитектура
Создадим простой проект Spring Boot с темами и разделами Kafka для публикации событий отправителями и подписки получателей. Разберем стратегии реализации повторных попыток, масштабируем микросервисы.
Как быстро найти проблемы с Python-типами через Pytype
Если вы работаете над большим проектом на Python или предпочитаете лаконичную и понятную базу кода, то Pytype станет для вас отличным помощником.
Python — это отличный язык...
Визуализация стратегии автоматизированного тестирования
Стратегия тестирования — это подход к автоматизированному тестированию вашего программного обеспечения. Она очень важна, и к ней следует отнестись серьезно. Я предложу визуальный способ...
Реализация распределенной трассировки с OpenTelemetry и Spring Boot 3
Создадим два микросервиса, сконфигурируем OpenTelemetry для приложения Gradle, протестируем и запустим проект. Обозначим типичные проблемы и их решения, дадим рекомендации.
Python для начинающих: all, any, zip, enumerate, filter, map
Подробные примеры применения на практике шести стандартных функций Python: all, any, zip, enumerate, filter, map.
Проекты на Python с помощью Visual Studio Code
Зачем использовать виртуальные среды в науке о данных?
Управление зависимостями играет важную роль для разработчиков пакетов и ПО. Но как насчет специалистов по науке о...
Выражение when в Kotlin
Рассмотрим особенности использования выражения when в Kotlin.
Базовый случай использования
На фрагменте ниже приведен базовый случай использования выражения when:
fun myFunction(valueToTest: Any) {
when...
Netlas — полноценный инструмент интернет-разведки
Ищете эффективные средства управление рисками информационной безопасности? С Netlas - инструментом интернет-разведки - потребуется всего несколько минут, чтобы создать область видимости любого целевого объекта и досконально исследовать ее.
Введение в каналы Golang
Golang использует горутины для параллельного программирования. На них можно ссылаться как на подзадачи для приложения. Если вы новичок в Golang, то рекомендую для начала...
Руководство по доступу к датчикам Android-устройств
Это простое руководство ознакомит вас с различными типами датчиков, а также научит определять их доступность на Android-устройствах и возможности. Кроме того, вам будут предложены реальные сценарии использования датчика освещенности и магнитометра.
Реализация шаблона Saga на Go: практический подход
Разберем нюансы управления продолжительными транзакциями в распределенных системах, реальные сценарии применения. Проиллюстрируем примером действие компенсации в этапах транзакций, откат предыдущих транзакций.
3 способа мониторинга изменений лог-файлов в Java
Научимся отслеживать изменения файлов тремя разными способами: запланированная задача + File.lastModified, WatchService и Apache Commons-IO.
Лучшие практики для эффективного кода на Golang. Часть 1
Изучим рекомендации с примерами кода на Go. Рассмотрим отступы, импорт пакетов, названия переменных, длину строк, константы, обработку ошибок, глобальные переменные, структуры для сложных данных, комментарии, горутины.
Parcel + Rust и WASM = идеальный ромком
Введение
Мне уже давно хотелось попробовать использовать Rust и WASM вместе. Причин для этого была масса: небольшой размер пакета, низкоуровневый доступ с надёжной производительностью и...
10 высокотехнологичных ресурсов для веб-разработчиков
Ознакомьтесь с 10 малоизвестными сайтами, предназначенными для веб-разработки. Передовые технологии, используемые этими ресурсами, - от потрясающих возможностей UI/UX до молниеносных бэкенд-решений - поднимут ваши проекты на новый уровень.
6 проверенных методов повышения безопасности Node.js
Беспокоитесь о том, как защитить приложения от рисков вредоносных атак? Предлагаем ознакомиться с шестью надежными способами повышения безопасности Node.js.
Что такое сервер TURN?
С помощью TURN можно запускать приложения видео- и голосовой связи, обмена сообщениями и других интерактивных онлайн-коммуникаций. Узнайте о возможностях TURN, его провайдерах, а также о том, как создать и настроить собственный TURN-сервер.
String и string в С#: больше, чем просто стиль?
Обзор
Во-первых, давайте рассмотрим оба типа:
String— это обычный идентификатор, который относится к типу данных .NET System.String. Также необходимо, чтобы был импортирован класс System.
string— это зарезервированный дескриптор в...








































































































