C# 24.09.2023
This commit is contained in:
parent
5fabd9ba6c
commit
8007485316
242
C#/C#.md
242
C#/C#.md
@ -108,3 +108,245 @@ int foo = Convert.ToInt32(Console.ReadLine());
|
||||
* \*
|
||||
* /
|
||||
* %
|
||||
|
||||
## Преобразование базовых типов данных
|
||||
|
||||
Операция сложения и вычитания возвращает int, если типы, на которые применяется операция, <= int (byte, short, int)
|
||||
|
||||
### Неявное преобразование
|
||||
|
||||
Работает только на расширение
|
||||
|
||||
```C#
|
||||
byte a = 4;
|
||||
ushort = a;
|
||||
```
|
||||
|
||||
### Явное преобразовывание
|
||||
|
||||
Работает на расширение и на сужение
|
||||
|
||||
```C#
|
||||
byte a = 5;
|
||||
byte b = 4;
|
||||
byte c = (byte) (a+b);
|
||||
```
|
||||
|
||||
## Ветвление
|
||||
|
||||
```C#
|
||||
int a = 5;
|
||||
|
||||
if (a == 5) {
|
||||
Console.WriteLine("It works");
|
||||
} else {
|
||||
Console.WriteLine("Cosmic ray!");
|
||||
}
|
||||
```
|
||||
|
||||
### Тернарный оператор
|
||||
|
||||
Краткая возвращающая форма if
|
||||
|
||||
```C#
|
||||
int x = 3;
|
||||
int y = 5;
|
||||
|
||||
string z = x < y ? "Works" : "Cosmic ray";
|
||||
```
|
||||
|
||||
### Switch
|
||||
|
||||
```C#
|
||||
int number = 1;
|
||||
|
||||
switch (number) {
|
||||
case 1:
|
||||
Console.WriteLine("case 1");
|
||||
goto case 5;
|
||||
case 3:
|
||||
Console.WriteLine("case 3");
|
||||
break;
|
||||
case 5:
|
||||
Console.WriteLine("case 5");
|
||||
break;
|
||||
default:
|
||||
Console.WriteLine("case whatever");
|
||||
break;
|
||||
}
|
||||
```
|
||||
|
||||
### Циклы
|
||||
|
||||
Всё как в С++
|
||||
|
||||
* while
|
||||
* do-while
|
||||
* for
|
||||
* foreach
|
||||
|
||||
## Массивы
|
||||
|
||||
Массивы позволяют хранить заранее известное кол-во элементов вместе
|
||||
|
||||
### Инициализация массивов
|
||||
|
||||
```C#
|
||||
int[] a = new int[3] {10, 20, 30};
|
||||
double[] b = new double[5];
|
||||
float[] c = {1.5f, 2.3f}; // Поймёт, что нужна длина 2
|
||||
```
|
||||
|
||||
### Длинна массивов
|
||||
|
||||
```C#
|
||||
int[] a = {10, 20};
|
||||
int len = a.Length;
|
||||
```
|
||||
|
||||
### Методы
|
||||
|
||||
```C#
|
||||
int[] a = {10, 30, 20};
|
||||
|
||||
Array.IndexOf(a, 10) // Вернёт 0. -1, если не найдёт.
|
||||
Array.Sort(a); // Сортирует по возрастанию. Станет {10, 20, 30}
|
||||
```
|
||||
|
||||
### Двумерный массив
|
||||
|
||||
```C#
|
||||
int[,] a = new int[10,10];
|
||||
```
|
||||
|
||||
### Динамический массив
|
||||
|
||||
```C#
|
||||
using System.Collections.Generic;
|
||||
|
||||
List<string> words = new List<string> ();
|
||||
words.Add("Foo");
|
||||
words.Add("Bar");
|
||||
words.RemoveAt(1);
|
||||
```
|
||||
|
||||
## Random
|
||||
|
||||
```C#
|
||||
Random r = new Random();
|
||||
int a = r.Next(); // От 0 до 2 миллиардов
|
||||
int b = r.Next(5); // От 0 до 5 (не включительно)
|
||||
int c = r.Next(3, 5); // От 3 до 5
|
||||
```
|
||||
|
||||
## Функции
|
||||
|
||||
```C#
|
||||
void Foo() {
|
||||
Console.WriteLine("Hello");
|
||||
}
|
||||
|
||||
// Краткая форма
|
||||
void Bar() => Console.WriteLine("Hi");
|
||||
```
|
||||
|
||||
### Параметры функции
|
||||
|
||||
```C#
|
||||
int Sum(int x, int y) => x + y; // Тут x и y - параметры
|
||||
|
||||
Sum(5, 6); // Тут 5 и 6 - аргументы
|
||||
```
|
||||
|
||||
#### Необязательные параметры
|
||||
|
||||
```C#
|
||||
void PrintPerson(string name, int age = 1) {
|
||||
Console.WriteLine($"{name} - {age}");
|
||||
}
|
||||
|
||||
PrintPerson("John", 5);
|
||||
PrintPerson(age: 5, name: "Bob"); // Именованные параметры
|
||||
```
|
||||
|
||||
#### Передача по ссылке
|
||||
|
||||
При передаче по ссылке и зменения внутри функции меняют оригинальное значение
|
||||
|
||||
```C#
|
||||
void Inc(ref int a) {
|
||||
a++;
|
||||
}
|
||||
|
||||
void BadInc(int a) {
|
||||
a++;
|
||||
}
|
||||
|
||||
int b = 5;
|
||||
Inc(ref b); // b == 6
|
||||
BadInc(b); // b осталась 6
|
||||
|
||||
Inc(b); // Так низя
|
||||
Inc(5); // И так низя
|
||||
Inc(ref 5); // И так тоже низя
|
||||
```
|
||||
|
||||
#### Выходной параметр
|
||||
|
||||
Функция может иметь несколько выходных параметров, а так лучше return
|
||||
|
||||
```C#
|
||||
void Sum(int a, int b, out int result) {
|
||||
result = a + b;
|
||||
}
|
||||
|
||||
int result;
|
||||
|
||||
Sum(5, 6, out result);
|
||||
```
|
||||
|
||||
#### Входные параментры
|
||||
|
||||
Передача по неизменяемой ссылке. Судя по всему полезно только для массивов
|
||||
|
||||
```C#
|
||||
int Sum(in int a, in int b) {
|
||||
return a + b;
|
||||
}
|
||||
|
||||
int a = 5;
|
||||
int b = 6;
|
||||
Sum(a, b);
|
||||
```
|
||||
|
||||
#### params
|
||||
|
||||
*params* позволяет передать не определённое кол-во параметров. После него не может быть больше параметров
|
||||
|
||||
```C#
|
||||
int Sum(params int[] nums) {
|
||||
int sum = 0;
|
||||
|
||||
foreach (int i in nums) {
|
||||
sum += i;
|
||||
}
|
||||
|
||||
return sum;
|
||||
}
|
||||
|
||||
int[] nums = {1, 2, 3, 4};
|
||||
Sum(nums);
|
||||
Sum(1, 2, 3);
|
||||
Sum(20);
|
||||
Sum();
|
||||
```
|
||||
|
||||
### Возвращение значений
|
||||
|
||||
```C#
|
||||
int Sum1(int a, int b) {
|
||||
return a + b;
|
||||
}
|
||||
|
||||
int Sum2(int a, int b) => a + b;
|
||||
```
|
||||
|
76
Java/Java.md
Normal file
76
Java/Java.md
Normal file
@ -0,0 +1,76 @@
|
||||
# Java
|
||||
|
||||
## Функция main
|
||||
|
||||
```Java
|
||||
package org.example;
|
||||
|
||||
public class Main {
|
||||
public static void main(String[] args) {
|
||||
System.out.println("Hello world!");
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Сокращения InteliJ
|
||||
|
||||
* psvm - public static void main
|
||||
* sout - Sytem.out.println()
|
||||
* serr - System.err.println()
|
||||
* I - for(Object object: ){}
|
||||
* fori - for (int i = 0; i< ; i++) {}
|
||||
* shift + shift - поиск по проекту
|
||||
* ctrl + alt + t - сниппеты для блоков кода (циклы, if, switch, try-catch)
|
||||
* alt + insert - сниппеты для класса
|
||||
|
||||
## Строки
|
||||
|
||||
Строки неизменяемые (immutable) и не могут иметь наследников (final). Для изменения копии
|
||||
|
||||
```Java
|
||||
// foo и bar - 1 объект в Pool (аля static)
|
||||
String foo = "foo";
|
||||
String bar = "foo";
|
||||
// baz - объект в куче
|
||||
String baz = new String("baz");
|
||||
```
|
||||
|
||||
### StringBuffer и StringBuilder
|
||||
|
||||
Данные типы - изменяемые строки с изменениями на месте. StringBuffer синхронизирует методы, поэтому медленее, но можно работать в многопотоке. StringBuilder быстрее, но методы не синхронизирует
|
||||
|
||||
```Java
|
||||
// Можно передать строку в инициализатор, но не обязательно
|
||||
StringBuffer sb = new StringBuffer();
|
||||
|
||||
sb.append("foo");
|
||||
sb.append(5);
|
||||
```
|
||||
|
||||
#### Методы StringBuffer и StringBuilder
|
||||
|
||||
* append (смотреть выше)
|
||||
* delete(int start, int end)
|
||||
* insert(int offeset, String str)
|
||||
* replace(int start, int end, String str)
|
||||
* reverse()
|
||||
* substring(int start, int end) - создаст новую строку
|
||||
* toString - перевести в строку
|
||||
|
||||
### RegEx
|
||||
|
||||
RegEx - щаблон для поиска строки в тексте
|
||||
|
||||
#### Примеры RegEx
|
||||
|
||||
* "java" - только слово java подойдёт
|
||||
* "\\d{3}" - 3 цифры
|
||||
|
||||
#### Pattern для RegEx
|
||||
|
||||
Pattern - скомпилированный RegEx
|
||||
|
||||
```Java
|
||||
Pattern p = Pattern.compile("java");
|
||||
p = Pattern.compile("java", Pattern.CASE_INSENSETIVE);
|
||||
```
|
Reference in New Issue
Block a user