- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
public string define(string content)
{
int till;
char[] CharArr = content.ToCharArray();
for (int i = 0; i < CharArr.Length; i++)
{
if (CharArr[i] == 'i')
{
till = i;
}
}
string Re = content.Substring(0,till);
return Re;
}
Семён, перелогиньтесь
https://ideone.com/3eXiXG
https://ideone.com/LsZpBh
А как дела с int[]?
new int[42] -- дефенишен, создаюший в память массив из 42х элементов.
чем int[] отличается от MySuperClass?
new int[] = new MySuperClass()
1) примитивы (в ноль и false)
2) филды объектов (в нул)
Таким образом становится понятно что неинициализированная переменная бывает только в одном случае: когда это автоматическая переменная, указывающая на объект (иными словами когда на стеке создается указатель на какой-то объект в куче). Его-то и надо инициализировать.
Кстати, о "низкоуровневом скаме": в OBJC при использовании ARC _все_ указатели указывают на nil, если не инициализированы. Так что данглинг поинтеры "указывающие вникуда" там не бывают.
ты написал горы текста хуйни, а он всего одно предложение.
"new int[4]" создает массив о четырех элементах в куче и кладет туда нули.
Так что всё там прекрасно инициализировано.
[code]
for (int i : new int[255]) {
System.out.println(i); // ОЧЕ много нолей
}
[code]
В языках с автоматическим управлением памятью не бывает данглинг поинтеров
Тарас говорил про переменную till, которая живёт на стеке.
я отвечал предыдущему оратору, который говорил про int[].
а тарасовый высер я прокомментировал выше: int это примтив, его не надо инициализировать, он автоматически инициализируется нолем.
если бы это было не так, то код бы не скомпилировался
пожалуйста, не нужно рассуждать о том, в чем ты не силен. Ты выглядишь глупо.
Неинициализированные инты у них в C#, бля.
А ты думаешь он компелируется?
> int это примтив, его не надо инициализировать, он автоматически инициализируется нолем.
В твоих влажных фантазиях. Из языков, что я знаю, только D так делает.
Не много ты, видать, языков знаешь.
Так делает:
1) сишечка и её детки (кресты, обжс итд)
2) практически все скриптовые языки
А вот в скриптовых ты прав: инициализируется. Но роман скриптовых не знает
Знаю, и потому люто их ненавижу.
В нашей уютной компании пишут в основном на C++ и пистоне. На жавке и скалке изредка, бэкэнд-сервисы.
Где твоя логика, гест?
"в основном пишут на C++" означает "не используют жаву"?
"используют жаву" означает "на ней пишет каждый"?
Зачем ты с ним споришь?
var a; /*Тут переменная инициализирована undefined */
alert(a);
"скриптовые языки" неформальное название языков без статической типизации, для которых основными реализациями являются интерпретаторы.
Ну вот JS хороший пример. Хотя практически ни в каком из этих языков нет декларации переменной отдельно от дефинишена (в пайтоне например это вообще не возможно впринципе). JS исключение.
Ну в перле есть еще объявление переменной. Но да, во всех языках со сборкой мусора, если переменную можно объявить без определения - ее значение будет определено без всяких ub.
в случае компиляции каждый модуль сначала компилируется , и только затем может быть загружен (ну или слинкован статически). В случае инетпретации шага "скомпилировать все модули" не существует.
В этом смысле пистончик инетпретируемый. Хотя ты конечно прав: ".pyc" файлы никто не отменял
Так, ARC гарантирует что все указатели на объекты указывают либо на валидный объект в памяти, либо на nil.
поскольку objc это надстройка над сишечкой, то когда ты делаешь так
GKGovno *govno;
ты просто создаешь на стеке указатель на GKGovno и ничем его не заполняешь, и получаешь висячий указатель.
Но если у тебя в шланге включен ARC, то эта штука начнет явно указывать на nil (алиас для NULL).
Много, видать, языков ты думаешь, что знаешь.
> сишечка и её детки
При размещении на стеке - ни си, ни плюсы не проинициализируют int. Кресты инициализируют объекты с дефолтными конструкторами, но речь-то о примитивах.
> практически все скриптовые языки
Я имел в виду языки с нормальной явной типизацией.
> только D так делает.
ещё Go
Люблю формальную, научную терминологию.
Статическая типизация более нормальная, чем динамическая.
> Статическая типизация более нормальная, чем динамическая.
Статическая и динамическая - это не формальная и уж тем более не научная терминология. Чувствую, скоро придёт @wvxvw и начнутся стены текста.
Уныле высеры wvxvw про то что "статической типизации не существует" мы уже читали. wvxvw взял конкретный кейс, к которому это понятие не применимо и сделал вывод что этого понятия не существует.
Ему уже объясняли тут, что в таком случае даже понятия "север" не существует, потому как на полюсе севера нет.
Ну и уж конечно особенно забавно, что автор выражения "нормальная типизация" рассказывает мне про терминологию.
Если я смогу определить тип переменной в питоне, не запуская интерпретатор пистона, в пистоне будет статическая типизация?
Если я в жавке написал фабрику, которая возвращает объект, точный тип которого неизвестен, стала ли жавка динамической?
2) ты видимо совсем не знаешь джавы. В джаве ты должен явно указать тип любой переменной (будь то указатель на объект или нет), и в случае фабрики ты должен явно указать тип возвращаемого ей значения. Разумеется, ты можешь вернуть подтип, однако же если результат вызова фабрики ты присваиваешь переменной, то тип этой переменной также должен быть определен.
Итого: в джаве для любой переменной (и любого выражения) всегда явно указан тип (ну или его можно вывести) без запуска программы.
В пайтоне, в общем случае, это не так.
Т.е. в жавке нельзя читать json с диска? А ObjectStream не сможет превращать байты в объекты с очень точным типом Object?
Статическая типизация - проводится проверка типов во время компиляции и говориться валиден ли код
Динамическая - код выполняется в любом случае, если будет найдено несоответствие типов - будет брошено исключение
Кегги, помоги, я запутался Конпелируется в жабе, но бросает исключение :(
Если язык имеет и статическую, и динамическую проверку типов, то относить его к какой-то одной категории, кмк, неправильно.
Разве что судить по принципу "всё, что не может в статику - динамическое, всё, что может - статическое", но это как-то странно.
P.S. Если написать компилятор пистона с невпупенным flow-analyzer-ом, который выводит типы сквозь границы модулей и реджектит код без нужных проверок, станет ли пистон статическим? Кстати, я слышал о подобных идеях в контексте построения IDE для жабоскриптов.
В жабе есть на уровне JVM (инструкция invokedynamic) для ускорения скриптовых языков, но нет на уровне языка Java.
В скалке есть сахарок для dynamic
Такие попытки есть (pycharm), но, во-первых, оно жутко тормозное даже на фоне свежих мелкомягких ide (а жабоебские иде как ни странно вообще отдыхают), во-вторых, оно бессильно если данные приходят извне.
spam = 'eggs' if user == '3_14dar' else 42
ну и какой тут тип?
В джаве так нельзя.
Эффективно можно считать, что в питоне у всех объектов есть общая база, вроде жабьего Object - PyObject. Вот такого статического типа и будет spam. Динамический тип будет либо строка, либо число.
> В джаве так нельзя.
ok. Чего ещё нельзя в джаве?
Как-то летели Холмс с Ватсоном на воздушном шаре. И заснули.
Просыпаются над какой-то незнакомой местностью, видят - внизу какой-то
мужик коров пасет. Снизились они и спрашивают мужика:
- Скажите, сэр, где мы находимся?
(долго думал)- На воздушном шаре.
- Спасибо, сэр! - и поднялись вверх. Холмс задумчиво говорит:
- Интересная местность, Ватсон! Программист пасет коров!
- Но, Холмс, с чего вы взяли, что он программист?
- Это элементарно! Во-первых, он долго думал над ответом. Во-вторых, его
ответ был абсолютно точен. И самое главное - абсолютно бесполезен!
Сёма, в джаве и так есть динамическая типизация
Dynamic type checking is the process of verifying the type safety of a program at runtime. Implementations of dynamically type-checked languages generally associate each runtime object with a "type tag" (i.e. a reference to a type) containing its type information
Только не это. Нееет! Лучше уж политсрач или гоатсе.
А все остальные языки или кладут туда мусор, или вовсе не компилируются (обычно не компилируются ЯПы с автоматическим управлением памяти)
это инициализация переменной массивом без указания содержимого.
Точно так же как если ты напишешь
MyArray arr = new MyArray(), то все поля класса MyArray заполнятся нулями/нулами
http://govnokod.ru/18357#comment290122
>Гумно без гц
Все нормально
content = content.Substring(0, indexOfElement);
bool bFind = false;
for(int idx = 0; idx < content.length; idx++)
{
if(content[idx] == 'i') {
bFind = true;
break;
}
re += content[idx];
}
return bFind? re : "";