Другое событие NullPointerException
возникает, когда объявляется массив объектов, а затем сразу же пытается разыменовать его внутри.
String[] phrases = new String[10];
String keyPhrase = "Bird";
for(String phrase : phrases) {
System.out.println(phrase.equals(keyPhrase));
}
Этот конкретный NPE можно избежать, если порядок сравнения отменяется ; а именно, использовать .equals
для гарантированного непустого объекта.
Все элементы внутри массива инициализируются их общим начальным значением ; для любого типа массива объектов, это означает, что все элементы null
.
Вы должны инициализировать элементы в массиве перед доступом или разыменованием их.
String[] phrases = new String[] {"The bird", "A bird", "My bird", "Bird"};
String keyPhrase = "Bird";
for(String phrase : phrases) {
System.out.println(phrase.equals(keyPhrase));
}
Нет действительно огромной разницы между Python и рубином, по крайней мере, на идеологическом уровне. По большей части они - просто различные разновидности того же самого. Таким образом я рекомендовал бы видеть, какой соответствует Вашему стилю программирования больше.
Я предлагаю, чтобы Вы испытали оба языка и выбрали тот, который обращается к Вам. И Python и Ruby могут сделать то, что Вы хотите.
Также читает этот поток .
если Вы любите повышение, необходимо учиться жить с шипами:)
Я не уверен, что Python выполнил бы все вещи, которых Вы требуете (особенно точка о минимальном различии между кодом и данными), но существует один аргумент в пользу Python. Существует проект там, который облегчает для Вас расширениям программы для Python в D, таким образом, у Вас может быть лучший из обоих миров. http://pyd.dsource.org/celerid.html
Для синтаксиса стиля Python и подобных шепелявости макросов (макросы, которые являются реальным кодом) и хороший DSL видят , сходятся .
Я имею, используют Python a очень бит, но намного больше Ruby. Однако я утверждал бы, что они оба обеспечивают то, что Вы попросили.
, Если я вижу все Ваши четыре точки тогда, можно, по крайней мере, проверить: http://www.iolanguage.com/
И Mozart/Oz может быть интересным для Вас также: http://mozart.github.io/
Friedrich
Отношенийфункции OCaml: статическая система типов, вывод типа, параметрический полиморфизм, хвостовая рекурсия, сопоставление с образцом, первый класс лексические закрытия, функторы (параметрические модули), обработка исключений и возрастающая автоматическая сборка "мусора" поколений.
я думаю, что это удовлетворяет следующее:
Важный:
- Хороший, чистый, нормальный синтаксис и последовательная, интуитивная семантика. В основном хорошо продуманный, забавный использовать, современный язык.
- Несколько парадигм. Никакая парадигма не является правильной для каждого проекта, или даже каждой небольшой подпроблемы в рамках проекта.
- интересный язык, который на самом деле влияет на способ, которым каждый думает о программировании.
Несколько важный:
- Производительность. Было бы хорошо, если бы производительность была достойна, но когда производительность будет реальным приоритетом, я буду использовать D вместо этого.
- Хорошо зарегистрированный.
Ruby является моим выбором после исследования Python, Smalltalk и Ruby.
Если бы Вы любите стиль шепелявости code-is-data понятие, но не любите синтаксис Lispy, возможно , Пролог был бы хорошим выбором.
, Квалифицирует ли это как "забава использовать, современный язык", я уеду другим для оценки.;-)
я читал на Lisp немного, и я хотел бы найти язык, который позволяет часть интересного материала, который Lisp делает, но без странного синтаксиса, и т.д. Lisp.
не Был бы все мы.
минимальное различие между кодом и данными, стиль Lisp
К сожалению, минимальное различие между кодом и данными и "странным" синтаксисом последствия друг друга.
, Если Вы хотите легкий для чтения синтаксис, у Вас есть Python. Однако код не представлен в любой из наиболее часто используемых встроенных структур данных. Это fails— как большинство языков do— в объекте № 1 Вашего 'важного' списка. Это мешает обеспечивать полезную справку.
у Вас не может быть всего этого. Помните, Вы не являетесь первыми для имения этой мысли. Если бы что-то как Ваш идеальный язык существовало, мы все использовали бы его. Так как реальный мир далек от Ваших идеалов, необходимо будет повторно присваивать приоритет списку пожеланий. "Важный" раздел должен быть перестроен для идентификации то, что является действительно важно для Вас.
Нет действительно много для разделения Python и Ruby. Я сказал бы, что сообщество Python является более многочисленным и более зрелым, чем сообщество Ruby, и это действительно важно для меня. Ruby является более выразительным языком, который имеет положительные и отрицательные последствия. Однако я уверен, что будет много людей для вдаваний в подробности об обоих этих языках, таким образом, я брошу третью опцию в кольцо. Как насчет JavaScript?
JavaScript был первоначально разработан, чтобы быть Схемой сети, и это основано на прототипе, который является преимуществом перед Python и Ruby до мультипарадигмы, и метапрограммирование затронуто. Синтаксис не так хорош как другие два, но это - вероятно, наиболее широко развернутый существующий язык, и производительность является улучшением каждый день.
Правовая оговорка: Я только балуюсь или языком, но я, по крайней мере, писал мелко рабочие программы (не только быстрые сценарии, для которых я использую Perl, удар или GNU делают) в обоих.
Ruby может быть действительно хорошим для "нескольких парадигм", указывают 3, потому что он упорно работает, чтобы облегчить создавать проблемно-ориентированные языки. Например, просмотрите онлайн и взгляд на несколько битов кода Ruby on Rails и несколько битов кода Граблей. Они - и Ruby, и Вы видите общие черты, но они не похожи на то, о чем Вы обычно думали бы как тот же язык.
Python, кажется, мне немного более предсказуем (возможно коррелируемый для 'убирания' и 'нормальная' точка 2), но я действительно не знаю, ли поэтому самого языка или просто что это обычно используется людьми с различными значениями. Я никогда не делал попытку глубокого волшебства в Python. Я, конечно, сказал бы, что оба языка хорошо продуманы.
И счет хорошо в 1 и 4. [Редактирование: на самом деле 1 является довольно спорным - существует "оценка" в обоих, как распространенная в интерпретируемых языках, но они едва концептуально чисты. Можно определить закрытия, присвоить методы объектам и этажерку. Не уверенный, идет ли это, насколько Вы хотите.]
Лично я нахожу Ruby большим количеством забавы, но частично поэтому легче получить отвлеченное размышление о прохладных способах сделать вещи. Я на самом деле использовал Python больше. Иногда Вы не хотите прохладный, Вы хотите продолжить его так, это сделано перед временем сна...
ни в Одного из них не трудно войти, таким образом, Вы могли просто решить сделать свою следующую незначительную задачу в одной и той после этого в другом. Или заберите вводную книгу о каждом из библиотеки, просматривать-чтение их обоих и посмотрите то, что захватывает Вас.
Вы рассмотрели Smalltalk? Это предлагает очень простой, ясный и расширяемый синтаксис с возможностями отражающей способности и самоанализа и полностью интегрированной средой разработки, которая использует в своих интересах те возможности. Взгляните на часть работы, сделанной в Smalltalk Писка, например. Много исследователей, использующих Писк, болтается на список рассылки Писка и #squeak на freenode, таким образом, можно получить справку по сложным вопросам очень легко.
Другие индикаторы его текущей уместности: это работает на любой платформе, которую Вы хотели бы назвать (включая iPhone); Gilad Bracha основывает свою работу Новояза над Писком; команды V8 получают первый опыт в Smalltalk VMs; и Dan Ingalls и Randal Schwartz недавно возвратились к работе Smalltalk после лет в дикой местности.
Всего наилучшего с Вашим поиском - сообщают нам то, что Вы решаете в конце.
Lisp удовлетворяет все Ваши критерии, включая производительность, и это - единственный язык, который не имеет (странного) синтаксиса. Если Вы будете сторониться его на таком удивительно ill-informed/wrong-headed основание и следовательно будете пропускать опыт использования, например, Emacs+SLIME+CL, Вы будете делать себя большая плохая услуга.
Вы описываете Ruby.
- Хорошее метапрограммирование. Способность создать классы, методы, функции, и т.д. во времени выполнения. Предпочтительно, минимальное различие между кодом и данными, стилем Lisp.
очень легко расшириться , и изменяют существующие примитивы во времени выполнения. В рубине все - объект, строки, целые числа, четные функции.
можно также создать ярлыки для синтаксического сахара, например, с class_eval.
- Хороший, чистый, нормальный синтаксис и последовательная, интуитивная семантика. В основном хорошо продуманный, забавный использовать, современный язык.
Ruby следует принцип меньшего удивления , и при сравнении кода Ruby по сравнению с эквивалентом на другом языке, многие люди считают его более "красивым".
- Несколько парадигм. Никакая парадигма не является правильной для каждого проекта, или даже каждой небольшой подпроблемы в рамках проекта.
можно следовать обязательный, объектно-ориентированный, функциональный и отражающий.
- интересный язык, который на самом деле влияет на способ, которым каждый думает о программировании.
Это очень субъективно, но с моей точки зрения способность использовать много парадигм одновременно допускает очень интересные идеи.
я попробовал Python, и он не соответствует Вашим важным моментам.
Ваши 4 "важных" точки приводят к Ruby точно, в то время как 2 "несколько важных" точки, которыми управляет Python. Пусть будет так.
Я использую Python для многих проектов, и я думаю, что Python действительно обеспечивает все функции, которые Вы попросили.
важный:
Несколько важный:
, Поскольку Вы - студент градиента, можно хотеть прочитать эту газету, утверждая, что Python - весь, ученому нужно . К сожалению, я не могу сравнить Python с Ruby, так как я никогда не использовал тот язык.
С уважением, Dennis
Ну, если Вам не нравится синтаксис шепелявости, возможно, ассемблер является способом пойти.:-)
Это, конечно, имеет минимальное различие между кодом и данными, мультипарадигма (или возможно который без парадигм), и это - расширение ума (если утомительный), испытывают и с точки зрения изучения и с точки зрения приемов, которые можно сделать.
Io удовлетворяет все Ваши "Важные" точки. Я не думаю, что существует лучший язык там для того, чтобы сделать сумасшедшее meta хакерство.
Сравните примеры кода, которые делают то же самое (соединение с новой строкой непустые описания объектов от a myList
список) на различных языках (языки расположены в обратно-алфавитном порядке):
Ruby:
myList.collect { |f| f.description }.select { |d| d != "" }.join("\n")
Или
myList.map(&:description).reject(&:empty?).join("\n")
Python:
descriptions = (f.description() for f in mylist)
"\n".join(filter(len, descriptions))
Или
"\n".join(f.description() for f in mylist if f.description())
Perl:
join "\n", grep { $_ } map { $_->description } @myList;
Или
join "\n", grep /./, map { $_->description } @myList;
JavaScript:
myList.map(function(e) e.description())
.filter(function(e) e).join("\n")
Io:
myList collect(description) select(!="") join("\n")
Вот руководство Io.
Используйте JS, просто проверьте AJS (альтернативный синтаксис JavaScript) на моем github http://github.com/visionmedia , он даст вам более понятные замыкания и т. Д .: D
Относительно вашей основной точки (метапрограммирование): Версия 1.6 Groovy имеет встроенное программирование AST (абстрактное синтаксическое дерево) в качестве стандартной и интегрированной функции. Ruby имеет RubyParser, но это надстройка.
тот, который поддерживает хаки метапрограммирования, которые просто не могут быть реализованы на статически скомпилированном языке
Мне бы очень хотелось найти язык, который позволяет некоторые из интересных вещей, которые Лисп делает
Лисп может быть скомпилирован.
Честно говоря, что касается возможностей метапрограммирования go, Ruby и Python намного больше похожи, чем хотелось бы признавать некоторые из их приверженцев. Этот обзор обоих языков предлагает довольно хорошее сравнение / обзор:
Итак, просто выберите один на основе некоторых критериев . Может быть, вам нравится Rails и вы хотите изучить этот код. Может быть, SciPy вам нравится. Посмотрите на экосистему библиотек, сообщества и т. Д. И выберите одну. Ты конечно выиграл
Ruby был бы лучше Lisp с точки зрения «мейнстрима» (что бы это на самом деле не означало, но одна реальная проблема заключается в том, насколько легко было бы найти ответы на ваши вопросы по программированию на Лиспе, если вы захотите пойти с этим.) В любом случае, я обнаружил, что Ruby очень легко освоить. За то же время, которое я потратил на первое изучение Python (или других языков, если на то пошло), я вскоре начал писать лучший код, намного более эффективно , чем когда-либо раньше. Однако это всего лишь мнение одного человека; Полагаю, отнеситесь к этому с недоверием. На данный момент я знаю о Ruby гораздо больше, чем Python или Lisp, но вы должны знать, что я был человеком Python довольно долгое время, прежде чем я переключился.
Lisp определенно довольно крутой и заслуживает внимания; как вы сказали, размер сообщества и т. д. может измениться довольно быстро. При этом сам размер не так важен, как качество сообщества. Например, канал # ruby-lang
по-прежнему заполнен невероятно умными людьми. Lisp, кажется, привлекает и некоторых действительно умных людей. Я не могу много говорить о сообществе Python, так как у меня не так много личного опыта, но иногда оно кажется «слишком большим». (Я помню, как люди довольно грубо говорили на своем IRC-канале, и из того, что я слышал от друзей, которые действительно увлекаются Python, это, кажется, скорее правило, чем исключение.)
В любом случае, некоторые ресурсы, которые вы можете найти полезными являются:
1) Серия прагматичных программистов по метапрограммированию Ruby ( http: //www.pragprog. com / screencasts / v-dtrubyom / the-ruby-object-model-and-metaprogramming ) - не бесплатно, но более поздние эпизоды весьма интригуют. (Код бесплатный, если вы хотите загрузить его и посмотреть, что вы узнаете.)
2) О Lisp, автор Пол Грэм ( http://www.paulgraham.com/onlisp.html ). Это немного старовато, но это классика (и ее можно скачать бесплатно).