Комментарий в одном из других ответов упоминал режим cbreak, который важен для реализаций Unix, потому что вы, как правило, не хотите, чтобы ^ C (KeyboardError
) потреблялся getchar (как и при установке терминала на raw mode, как это сделано большинством других ответов).
Еще одна важная деталь: если вы хотите прочитать один символ , а не один байт , вы должны прочитать 4 байта из входного потока, так как это максимальное количество байтов, которое будет содержать один символ в UTF-8 (Python 3+). Чтение только одного байта приведет к неожиданным результатам для многобайтовых символов, таких как стрелки клавиатуры.
Вот моя измененная реализация для Unix:
import contextlib
import os
import sys
import termios
import tty
_MAX_CHARACTER_BYTE_LENGTH = 4
@contextlib.contextmanager
def _tty_reset(file_descriptor):
"""
A context manager that saves the tty flags of a file descriptor upon
entering and restores them upon exiting.
"""
old_settings = termios.tcgetattr(file_descriptor)
try:
yield
finally:
termios.tcsetattr(file_descriptor, termios.TCSADRAIN, old_settings)
def get_character(file=sys.stdin):
"""
Read a single character from the given input stream (defaults to sys.stdin).
"""
file_descriptor = file.fileno()
with _tty_reset(file_descriptor):
tty.setcbreak(file_descriptor)
return os.read(file_descriptor, _MAX_CHARACTER_BYTE_LENGTH)
Обычно все переменные запустятся с нижнего регистра:
int count = 32;
double conversionFactor = 1.5d;
Некоторым людям нравится помещать статические константы в весь случай:
public static final double KILOGRAM_TO_POUND = 2.20462262;
Вещи становятся более раздражающими, когда Вы имеете дело с акронимами, и нет никакого реального стандарта на том, необходимо ли использовать:
HTMLHandler myHtmlHandler;
или
HTMLHandler myHTMLHandler.
Теперь, так или иначе, отмечают, что имена классов (Объект, Строка, HTMLHandler) всегда запускаются с прописной буквы, но переменные отдельного объекта запускают нижний регистр.
Можно найти именование в Конвенции .
Кода JavaА быстрая сводка:
UpperCamelCase
. lowerCamelCase
org.acme.project.subsystem
ALL_CAPS
. Конвенция состоит в том, что имена классов запускаются с Прописной буквы. Имена переменной являются Camel-регистром. Даже если ссылки на переменную объект это все еще запускается с нижнего регистра.
Этот страница должна помочь.
Некоторым людям (кто не я) нравится дифференцировать переменные Метода от Переменных экземпляра путем добавления префикса Переменных экземпляра "это". Это также решает проблему, которая происходит при присвоении параметра Переменной экземпляра того же имени:
public ConstructorMethod(MyVar variable) {
this.variable=variable;
}
, Но тогда некоторые люди чувствуют, что необходимо всегда использовать тот шаблон - но я не являюсь сумасшедшим об этом - я думаю, что это - излишество, если Вы сохраняете свои методы и классы маленькими.
кроме того, некоторые люди используют шаблон именования для параметров. Это (снова) пригождается, когда Вы присваиваетесь от конструктора к Переменной экземпляра:
public ConstructorMethod(MyVar pVariable) {
variable=pVariable;
}
Обычно шаблон pVariable
или _variable
. Я иногда использую это, потому что я нахожу это более читаемым, чем это, но это имеет недостаток создания Вашего менее читаемого Javadocs.
В любом случае, мне действительно не нравится идея всегда использования ни одного из этих шаблонов, они являются великими знать, но если Вы действительно нуждаетесь в помощи, дифференцируя их всюду по Вашему коду, говорите Eclipse отображать им различными цветами.
Конвенции действительно зависят от отдельного места, для которого Вы кодируете.
В целом, от того, что я видел, классами является CamelCased (с верхним регистром сначала), методы запускаются с нижнего регистра и переменных, которые я видел повсеместно (некоторый CamelCased, некоторый Camel-регистр с первой буквой ниже (РЕДАКТИРОВАНИЕ: как упомянуто выше, это - норма), некоторые даже с венгерской записью). Это зависит от Вашего стиля и стиля, который принял проект, Вы продолжаете работать.