CoffeeScript

CoffeeScript
Изображение логотипа
Класс языка
Появился в 13 декабря 2009
Автор Джереми Ашкенас
Расширение файлов .coffee
Выпуск 2.7.0[1] (24 апреля 2022; 2 года назад (2022-04-24))
Испытал влияние JavaScript, Python, Ruby, Haskell, Erlang
Повлиял на MoonScript, LiveScript
Лицензия лицензия MIT[2]
Сайт coffeescript.org
ОС кроссплатформенность

CoffeeScript ([’kɔ:fɪ skrɪpt]; кофи скрипт) — язык программирования, транслируемый в JavaScript. CoffeeScript добавляет синтаксический сахар в духе Ruby, Python, Haskell и Erlang для того, чтобы улучшить читаемость кода и уменьшить его размер. CoffeeScript позволяет писать более компактный код по сравнению с JavaScript[3]. JavaScript-код, получаемый трансляцией из CoffeeScript, полностью проходит проверку JavaScript Lint.

История

Создателем языка является Джереми Ашкенас.

Изначально компилятор был написан на Ruby, но в версии 0.5, которая вышла 21 февраля 2010 года, компилятор был реализован на самом же CoffeeScript.

CoffeeScript был радушно воспринят в Ruby-сообществе. Встроенная поддержка CoffeeScript была добавлена в веб-фреймворк Ruby on Rails с версии 3.1.

Преимущества использования

Использование пробелов как разграничительных знаков(вместо скобок, точек с запятой и прочих), делает CoffeeScript кратким. По сравнению с JavaScript, строка для того же конкретного кода в CoffeeScript сокращается примерно до половины (примерно на 55 % меньше). Так же CoffeeScript позволяет избежать проблем с объявлением области действия в программе, поскольку в отличие от JavaScript использование ключевого слова var перед объявлением переменной не требуется. Помимо этого, в CoffeeScript есть ряд удобных функций, таких как осмысление массивов, псевдонимы прототипов и классы, которые ещё больше сокращают количество вводимых символов.

Недостатки использования

Дополнительный этап компиляции между написанным кодом и кодом на JavaScript увеличивает общее время компиляции программы. CoffeeScript не является широко используемым, из за чего сложней искать источники информации по нему и кооперировать с другими разработчиками

Синтаксис

Особенности

— отсутствие точек с запятой

— фигурные скобки ({}) заменены табуляцией

Комментарии

Синтаксис для комментариев заимствован из Ruby, где каждый однострочный комментарий начинается со знака решетки «#», а многострочные комментарии заключены между тремя символами решетки:

# A single line comment

###
    A multiline 
    comment
###

Пробелы

Вдохновившись Python, в CoffeeScript вместо фигурных скобок используется табуляция

Переменные

Неподдерживаемость CoffeeScript глобальных переменных предотвращает ошибки доступа, которые могли возникнуть в JavaScript при случайном объявлении глобальной переменной.

CoffeeScript:

myVariable = "test"

JavaScript:

var myVariable;
myVariable = "test";

Функции

CoffeeScript удаляет довольно многословный оператор функции и заменяет его тонкой стрелкой: ->. Функции могут быть однострочными или отступать на несколько строк. Последнее выражение в функции неявно возвращается.

CoffeeScript:

func = -> "bar"

CoffeeScript:

func = ->
  # An extra line
  "bar"

JavaScript:

var func;
func = function() {
  return "bar";
};

Аргументы функций

Аргументы функции записываются в круглые скобки перед стрелкой. Есть поддержка аргументов по умолчанию.

CoffeeScript:

times = (a = 1, b) -> a * b

JavaScript:

var times;
times = function(a, b) {
    if(a == null){
        a = 1;
    }
  return a * b;
};

Так же можно использовать слайсы для приема нескольких аргументов CoffeeScript:

a = "Howdy!"

alert a
# Equivalent to:
alert(a)

alert inspect a
# Equivalent to:
alert(inspect(a))

JavaScript:

var a;
a = "Howdy!";
alert(a);
alert(a);
alert(inspect(a));
alert(inspect(a));

Вызов функций

Функции можно вызывать точно так же, как и в JavaScript, с помощью скобок (), apply() или call(). Однако, как и в Ruby, CoffeeScript автоматически вызывает функции, если они вызываются хотя бы с одним аргументом.

CoffeeScript:

myVariable = "test"

JavaScript:

var myVariable;
myVariable = "test";

Объектные литералы и объявление массивов

Объектные литералы задаются точно так же, как и в JavaScript, с помощью пары скобок и операторов ключ/значение. Однако, как и в случае с вызовом функций, в CoffeeScript скобки необязательны. Вместо запятых можно использовать отступы и новые строки.

CoffeeScript:

object1 = {one: 1, two: 2}

# Without braces
object2 = one: 1, two: 2

# Using new lines instead of commas
object3 = 
  one: 1
  two: 2

User.create(name: "John Smith")

JavaScript:

var object1, object2, object3;
object1 = {
  one: 1,
  two: 2
};
object2 = {
  one: 1,
  two: 2
};
object3 = {
  one: 1,
  two: 2
};
User.create({
  name: "John Smith"
});

Аналогично, в массивах вместо запятых могут использоваться пробельные символы, хотя квадратные скобки ([]) по-прежнему обязательны. CoffeeScript:

array1 = [1, 2, 3]

array2 = [
  1
  2
  3
]

array3 = [1,2,3,]

JavaScript:

var array1, array2, array3;
array1 = [1, 2, 3];
array2 = [1, 2, 3];
array3 = [1, 2, 3];

Условные операторы

Если оператор if расположен в одной строке, необходимо использовать ключевое слово then, чтобы CoffeeScript знал, когда начинается блок. Условные операторы (?:) не поддерживаются, вместо них следует использовать однострочный оператор if/else.

CoffeeScript:

if true == true
  "We're ok"

if true != true then "Panic"

# Equivalent to:
#  (1 > 0) ? "Ok" : "Y2K!"
if 1 > 0 then "Ok" else "Y2K!"

JavaScript:

if (true === true) {
  "We're ok";
}
if (true !== true) {
  "Panic";
}
if (1 > 0) {
  "Ok";
} else {
  "Y2K!";
}

В CoffeeScript также используется идиома Ruby, позволяющая использовать суффиксные операторы if. CoffeeScript:

alert "It's cold!" if heat < 5

JavaScript:

if (heat < 5) {
  alert("It's cold!");
}

Вместо восклицательного знака (!) для отрицания можно также использовать ключевое слово not или оператор unless CoffeeScript:

if not true then "Panic"
unless true
  "Panic"

JavaScript:

if (!true) {
  "Panic";
}

Аналогично not, в CoffeeScript также вводится оператор is, который работает как === в JavaScript. CoffeeScript:

if true is 1
  "Type coercion fail!"

JavaScript:

if (true === 1) {
  "Type coercion fail!";
}

Интерполяция строк

CoffeeScript привносит в JavaScript интерполяцию строк в стиле Ruby. Строки в двойных кавычках могут содержать теги #{}, которые содержат выражения, подлежащие интерполяции в строку.

CoffeeScript:

favourite_color = "Blue. No, yel..."
question = "Bridgekeeper: What... is your favourite color?
            Galahad: #{favourite_color}
            Bridgekeeper: Wrong!
"

JavaScript:

var favourite_color, question;
favourite_color = "Blue. No, yel...";
question = "Bridgekeeper: What... is your favourite color?            Galahad: " + favourite_color + "            Bridgekeeper: Wrong!            ";

Циклы и вычисления

CoffeeScript:

JavaScript:

Массивы

CoffeeScript черпает вдохновение из Ruby, когда речь идет о создании массивов с помощью диапазонов. Диапазоны создаются двумя числовыми значениями, первой и последней позициями в диапазоне, разделенными … или ….. Если диапазон не имеет никакого префикса, CoffeeScript расширяет его до массива.

CoffeeScript:

range = [1..5]

JavaScript:

var range;
range = [1, 2, 3, 4, 5];

Если же диапазон указывается сразу после переменной, то CoffeeScript преобразует его в вызов метода slice().

CoffeeScript:

firstTwo = ["one", "two", "three"][0..1]
numbers = [0..9]
numbers[3..5] = [-3, -4, -5]
my = "my string"[0..2]

JavaScript:

var firstTwo;
firstTwo = ["one", "two", "three"].slice(0, 2);
var numbers, _ref;
numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
[].splice.apply(numbers, [3, 3].concat(_ref = [-3, -4, -5])), _ref;
var my;
my = "my string".slice(0, 3);

Проверка наличия значения внутри массива всегда является проблемой в JavaScript, тем более что функция indexOf() пока не имеет полной кроссбраузерной поддержки. В CoffeeScript эта проблема решается с помощью оператора in:

CoffeeScript:

words = ["rattled", "roudy", "rebbles", "ranks"]
alert "Stop wagging me" if "ranks" in words

JavaScript:

var words;
var __indexOf = Array.prototype.indexOf || function(item) {
  for (var i = 0, l = this.length; i < l; i++) {
    if (this[i] === item) return i;
  }
  return -1;
};
words = ["rattled", "roudy", "rebbles", "ranks"];
if (__indexOf.call(words, "ranks") >= 0) {
  alert("Stop wagging me");
}

Классы

CoffeeScript использует собственный прототип JavaScript для создания классов, добавляя немного синтаксического сахара для наследования статических свойств и сохранения контекста. В CoffeeScript используются функции-конструкторы, что означает возможность инстанцирования классов с помощью оператора new. CoffeeScript предоставляет сокращение для общего шаблона установки свойств экземпляра класса. Префикс аргумента @ позволяет CoffeeScript автоматически устанавливать аргументы как свойства экземпляра в конструкторе.

CoffeeScript:

class Animal
  constructor: (@name) ->

JavaScript:

var Animal;
Animal = (function() {
  function Animal(name) {
    this.name = name;
  }
  return Animal;
})();

Свойства экземпляра

Добавление дополнительных свойств экземпляра в класс очень просто, это точно такой же синтаксис, как и добавление свойств к объекту. Свойства должны быть правильно расположены с отступом внутри тела класса.

CoffeeScript:

class Animal
  price: 5

  sell: (customer) ->

animal = new Animal
animal.sell(new Customer)

JavaScript:

var Animal, animal;
Animal = (function() {
  function Animal() {}
  Animal.prototype.price = 5;
  Animal.prototype.sell = function(customer) {};
  return Animal;
})();
animal = new Animal;
animal.sell(new Customer);

Статичные свойства

Внутри определения класса, ключевое слово this и @ ссылаются на объект класса

CoffeeScript:

class Animal
  this.find_ = (name) -> 
  @.age_ = (age) ->

Animal.find_("Parrot")

JavaScript:

var Animal;
Animal = (function() {
  function Animal() {}
  Animal.find_ = function(name) {};
  Anumal.age_ = function(age){};
  return Animal;
})();
Animal.find_("Parrot");

Наследование

Наследование класса происходит при помощи ключевого слова extends

CoffeeScript:

class Animal
  constructor: (@name) ->

  alive: ->
    false

class Parrot extends Animal
  constructor: ->
    super("Parrot")

  dead: ->
    not @alive()

JavaScript:

var Animal, Parrot;
var __hasProp = Object.prototype.hasOwnProperty, __extends = function(child, parent) {
  for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; }
  function ctor() { this.constructor = child; }
  ctor.prototype = parent.prototype;
  child.prototype = new ctor;
  child.__super__ = parent.prototype;
  return child;
};
Animal = (function() {
  function Animal(name) {
    this.name = name;
  }
  Animal.prototype.alive = function() {
    return false;
  };
  return Animal;
})();
Parrot = (function() {
  __extends(Parrot, Animal);
  function Parrot() {
    Parrot.__super__.constructor.call(this, "Parrot");
  }
  Parrot.prototype.dead = function() {
    return !this.alive();
  };
  return Parrot;
})();

Cтатические свойства копируются в подклассы, а не наследуются по прототипу, как свойства экземпляра. Это связано с особенностями реализации прототипической архитектуры JavaScript и является трудноразрешимой проблемой.

Each

В JavaScript для итерации по каждому элементу массива можно использовать либо недавно добавленную функцию forEach(), либо же цикл for в стиле C. Хотя синтаксис forEach() гораздо более лаконичен и удобен для чтения, он страдает тем недостатком, что функция обратного вызова будет вызываться на каждой итерации массива, и поэтому работает гораздо медленнее, чем эквивалентный цикл for. Синтаксис CoffeeScript обеспечивает ту же выразительность, что и forEach(), но без ограничений по скорости.

CoffeeScript:

myFunction(item) for item in array

JavaScript:

var item, _i, _len;
for (_i = 0, _len = array.length; _i < _len; _i++) {
  item = array[_i];
  myFunction(item);
}

Includes

Проверка того, находится ли значение внутри массива, обычно выполняется с помощью функции indexOf(). CoffeeScript использует Array.prototype.indexOf() и, при необходимости, шимминг, чтобы определить, находится ли значение внутри массива. К сожалению, это означает, что аналогичный синтаксис не будет работать для строк. Приходится возвращаться к использованию indexOf() и проверять, не будет ли результат отрицательным или, что ещё лучше, использовать побитовый оператор, чтобы не делать сравнение −1.

CoffeeScript:

string   = "a long test string"
included = !!~ string.indexOf "test"

JavaScript:

var included, string;
string = "a long test string";
included = !!~string.indexOf("test");

Итерации

Для итерации в JavaScript используется оператор in. В CoffeeScript Вместо этого оператор был переименован в of, и его можно использовать следующим образом:

CoffeeScript:

object = {one: 1, two: 2}
alert("#{key} = #{value}") for key, value of object

JavaScript:

var key, object, value;
object = {
  one: 1,
  two: 2
};
for (key in object) {
  value = object[key];
  alert("" + key + " = " + value);
}

Min/Max

Math.max и Math.min принимают несколько аргументов, поэтому можно легко использовать … для передачи им массива, получая максимальное и минимальное значения в массиве.

CoffeeScript:

Math.max [14, 35, -7, 46, 98]... # 98
Math.min [14, 35, -7, 46, 98]... # -7

JavaScript:

Math.max.apply(Math, [14, 35, -7, 46, 98]);
Math.min.apply(Math, [14, 35, -7, 46, 98]);

And/or

В руководствах по стилю CoffeeScript указано, что or предпочтительнее, чем ||, а and предпочтительнее, чем &&. Это предпочтение более английского стиля также относится к использованию is вместо == и isnt вместо !=. Одним из чрезвычайно приятных дополнений к CoffeeScript является 'or equals' — паттерн, который рубинисты могут узнать как ||=:

CoffeeScript:

string = "migrating coconuts"
string == string # true
string is string # true

JavaScript:

var string;
string = "migrating coconuts";
string === string;
string === string;

Внешние библиотеки

Использование внешних библиотек — это то же самое, что вызов функций из библиотек CoffeeScript, поскольку в конечном итоге все компилируется в JavaScript.

CoffeeScript:

# Use local alias
$ = jQuery

$ ->
  # DOMContentLoaded
  $(".el").click ->
    alert("Clicked!")

JavaScript:

var $;
$ = jQuery;
$(function() {
  return $(".el").click(function() {
    return alert("Clicked!");
  });
});

Private variables

Ключевое слово do в CoffeeScript позволяет выполнять функции немедленно, что является отличным способом инкапсуляции области видимости и защиты переменных.

Реализация

На официальном сайте языка есть раздел «try coffeescript», позволяющий выполнять программы на нём online[4]. В отличие, к примеру, от Try Ruby[5], при этом не будет происходить запросов к серверу, код компилируется и исполняется непосредственно в браузере.

Примеры

Переменные

CoffeeScript:

age  = 2
male = true
name = "Матвей"

JavaScript:

let age = 2,
    male = true,
    name = "Матвей";

Функции

CoffeeScript:

say = (speech) ->
  alert speech

say "Привет мир!"

JavaScript с использованием ECMAScript 2015:

const say = speech => alert(speech);
say('Привет мир!');

JavaScript:

var say = function(speech) {
  alert(speech);
};
say("Привет мир!");

Классы и объекты

CoffeeScript:

class Human
  constructor : (@name) ->

class Baby extends Human
  say   : (msg) -> alert "#{@name} говорит '#{msg}'"
  sayHi : -> @say('здравствуй!')

matt = new Baby("Матвей")
matt.sayHi()

JavaScript с использованием ECMAScript 2015:

class Human {
	constructor(name) {
		this.name = name;
	}
}

class Baby extends Human {
	say(msg) {
		alert(`${this.name} говорит '${msg}'`);
	}
	sayHi()	{
		this.say('здравствуй!');
	}
}

const matt = new Baby('Матвей');
matt.sayHi();

Аналог на JavaScript (именно аналог, а не результат компиляции):

function Human(name){
  this.name = name;
}

function Baby(name){
  Human.call(this, name);
}

Baby.prototype = Object.create(Human.prototype);
Baby.prototype.say = function(msg){
  alert(this.name + ' говорит ' + msg);
};
Baby.prototype.sayHi = function(){
  this.say('здравствуй!');
};
Baby.prototype.constructor = Human;

var matt = new Baby("Матвей");
matt.sayHi();

Примечание: в JavaScript при работе с «классами» (конструктор + прототипы + функции для наследования и смешивания) часто используют обёртки (MooTools, AtomJS и другие). Аналогия на JavaScript с классовой обёрткой AtomJS:

var Human = Class({
  initialize : function(name) {
    this.name = name;
  }
});

var Baby = Class({
  Extends : Human,
  say : function(msg) {
    alert(this.name + ' говорит ' + msg);
  },
  sayHi : function() {
    this.say('здравствуй!');
  }
});

var matt = new Baby("Матвей");
matt.sayHi();

Пример класса CoffeeScript с различными видами свойств.

class Test
  say   = (msg) -> alert msg       # приватный метод
  @echo = (msg) -> console.log msg # статический метод, записан в Test
  setHi : (msg) ->                 # динамический метод, записан в Test.prototype
    @hi = -> msg                   # динамический метод, записан в экземпляр Test

Компилятор

Интересным является тот факт, что компилятор для CoffeeScript написан на самом CoffeeScript

См. также

Примечания

  1. "2.7.0". Архивировано 23 июня 2022. Дата обращения: 23 июня 2022.
  2. The coffeescript Open Source Project on Open Hub: Licenses Page — 2006.
  3. Пример на титульной странице официального сайта. Дата обращения: 18 января 2012. Архивировано 9 июня 2017 года.
  4. Try CoffeeScript. coffeescript.org. Дата обращения: 4 января 2016. Архивировано 9 июня 2017 года.
  5. Try Ruby: learn the basics of the Ruby language in your browser. tryruby.org. Дата обращения: 4 января 2016. Архивировано 28 сентября 2011 года.

Литература

Ссылки

Смежные проекты:

  • Компилятор CoffeeScript для Windows
  • CoffeeKup, шаблонизатор и движок для генерации HTML-кода на CoffeeScript.
  • Prepros, компилирует на лету CoffeeScript. Под Windows и OSX (также компилирует LESS, Stylus, Haml, Jade, Markdown, Slim, SASS)

Read other articles:

Diego Simeone Simeone sebagai pelatih Atlético Madrid ditahun 2019Informasi pribadiNama lengkap Diego Pablo SimeoneTanggal lahir 28 April 1970 (umur 53)Tempat lahir Buenos Aires, ArgentinaTinggi 1,77 m (5 ft 9+1⁄2 in)Posisi bermain GelandangKarier senior*Tahun Tim Tampil (Gol)1987–1990 Vélez Sársfield 76 (14)1990–1992 Pisa 55 (6)1992–1994 Sevilla 64 (12)1994–1997 Atlético Madrid 98 (21)1997–1999 Inter Milan 57 (11)1999–2003 Lazio 90 (15)2003–2005 A...

 

Rumah Sursock, Beirut, Lebanon Keluarga Sursock (juga Sursuq) adalah sebuah keluarga Kristen Ortodoks Yunani dari Lebanon. Berasal dari Konstantinopel pada zaman Kekaisaran Bizantium, keluarga tersebut tercatat telah tinggal di Beirut sejak 1714. Keluarga tersebut membangun jaringan hubungan dekat dengan keluarga-keluarga aristokrat Mesir, Prancis, Irlandia, Italia dan Jerman dan memegang usaha dan distribusi di sepanjang Mediterania.[1][2] Keluarga Sursock adalah salah satu k...

 

Election for the governorship of the U.S. state of Kansas 1914 Kansas gubernatorial election ← 1912 November 3, 1914 1916 →   Nominee Arthur Capper George H. Hodges Party Republican Democratic Popular vote 209,543 161,696 Percentage 39.67% 30.61%   Nominee Henry Justin Allen Julius B. Billard Party Progressive Independent Popular vote 84,060 47,201 Percentage 15.91% 8.94% County resultsCapper:      30–40%    &...

Lok Sabha Constituency in Andhra Pradesh HindupuramLok Sabha constituencyConstituency detailsCountryIndiaRegionSouth IndiaStateAndhra PradeshAssembly constituenciesRaptaduMadakasiraHindupuramPenukondaPuttaparthiDharmavaramKadiriEstablished1957Total electors14,46,496ReservationNoneMember of Parliament17th Lok SabhaIncumbent Kuruva Gorantla Madhav Party  YSRCPElected year2019 Hindupuram Lok Sabha constituency is one of the twenty-five lok sabha constituencies of Andhra Pradesh in Indi...

 

Football match1877 FA Cup finalThe second FA Cup trophy is identical in design to that won by Wanderers in 1877. The original trophy was stolen in 1895 and never recovered.Event1876–77 FA Cup Wanderers Oxford University 2 1 After extra timeDate24 March 1877VenueKennington Oval, LondonRefereeSidney Havell Wright (Great Marlow F.C.)Attendance3,000← 1876 1878 → The 1877 FA Cup final was a football match between Wanderers and Oxford University on 24 March 1877 at Kennington Oval in...

 

British law firms established in 1567 2 Hare CourtHeadquartersCity of London, EC4United KingdomOfficesLondon, United KingdomNo. of lawyers77 practitioners[1]Major practice areasCrime, regulatory[2]Key peopleJonathan Laidlaw KC[3]Date founded1567 (1567)[4]Company typeProfessional limited liability partnershipWebsite2HareCourt.com 2 Hare Court is a barristers' chambers specialising in criminal and regulatory law,[2] located in the...

L'expression « enlèvement international d'enfant » vient du droit international privé : elle renvoie au déplacement illégal d'un enfant depuis son domicile par une connaissance ou un membre de la famille vers un autre pays. Dans ce contexte, « illégal » signifie habituellement « en infraction au droit de garde » et le « domicile » est la résidence habituelle (en) de l'enfant. Ainsi que le laisse entendre « infraction au...

 

Style of sunglasses The examples and perspective in this US-centric article may not represent a worldwide view of the subject. You may improve this US-centric article, discuss the issue on the talk page, or create a new US-centric article, as appropriate. (November 2021) (Learn how and when to remove this message) F.W. Hunter, Army test pilot, with AN 6531 sunglasses (1942) Aviator sunglasses are a style of sunglasses that was developed by a group of American firms. The original Bausch & ...

 

Child's Play 1 beralih ke halaman ini. Untuk film tahun 2019 yang berjudul sama, lihat Child's Play (film 2019). Untuk waralaba media, lihat Child's Play (waralaba). Child's PlayTheatrical Release PosterSutradaraTom HollandProduserDavid KirschnerDitulis olehDon Mancini (story)Don Mancini andJohn Lafia andTom Holland (screenplay)PemeranCatherine HicksChris SarandonBrad Dourif Alex VincentDinah ManoffTommy SwerdlowJack ColvinNeil GiuntoliPenata musikJoe RenzettiSinematograferBill ButlerPe...

Industrial sector which manufactures weapons and military technology and equipment Unimog truck at the International Defence Industry Fair (IDEF) in 2007Part of a series onWarOutline History Prehistoric Ancient Post-classical castles Early modern pike and shot napoleonic Late modern industrial fourth-gen Military Organization Command and control Defense ministry Army Navy Air force Marines Coast guard Space force Reserves Regular / Irregular Ranks Specialties: Staff Engineers Intelligence Rec...

 

American football player (born 1995) American football player Vita VeaVea with the Buccaneers in 2021No. 50 – Tampa Bay BuccaneersPosition:Nose tacklePersonal informationBorn: (1995-02-05) February 5, 1995 (age 29)Stanford, California, U.S.Height:6 ft 4 in (1.93 m)Weight:347 lb (157 kg)Career informationHigh school:Milpitas (Milpitas, California)College:Washington (2014–2017)NFL draft:2018 / Round: 1 / Pick: 12Career history Tampa Bay Bucc...

 

Waterway in Northern California Yuba RiverHenneet,[1] Rio De Los Yubas[1]At South Yuba River State ParkMap of the Yuba River basinEtymologyFrom the Nisenan name for waterwayLocationCountryUnited StatesStateCaliforniaRegionNevada CountyCitiesNorth San Juan, Marysville, Yuba CityPhysical characteristicsSourceConfluence of North and Middle Yuba River • locationNear North San Juan, Yuba/Nevada county line • coordinates39°22′07″N 121°08′...

American high jumper Alice CoachmanPersonal informationBirth nameAlice Marie CoachmanFull nameAlice Coachman DavisBornNovember 9, 1923 (1923-11-09)Albany, Georgia, U.S.DiedJuly 14, 2014 (2014-07-15) (aged 90)Albany, Georgia, U.S.SportCountryUnited StatesSportAthleticsRetiredYes Medal record Women's athletics Representing the  United States Olympic Games 1948 London High jump Alice Marie Coachman Davis (November 9, 1923 – July 14, 2014) was an American athlete. ...

 

American researcher, professor, and writer (born 1935) For the ice hockey coach, see Don Norman (ice hockey). Don NormanNorman in 2005BornDonald Arthur Norman (1935-12-25) December 25, 1935 (age 88)NationalityAmericanAlma materMITUniversity of PennsylvaniaKnown forThe Design of Everyday ThingsCognitive ergonomicsUser-centered designScientific careerFieldsCognitive scienceUsability engineeringInstitutionsNorthwestern UniversityUniversity of California, San DiegoNielsen Norman Gr...

 

Pour les articles homonymes, voir Sharon. Cet article est une ébauche concernant une localité du Massachusetts. Vous pouvez partager vos connaissances en l’améliorant (comment ?) selon les recommandations des projets correspondants. SharonLe centre-ville de SharonGéographiePays  États-UnisÉtat MassachusettsComté comté de NorfolkPartie de Massachusetts House of Representatives' 8th Norfolk district (en), Massachusetts Senate's Bristol and Norfolk district (en), Massachuset...

U.S. National Championships 1883Sport Tennis Data21 agosto - 24 agosto Edizione3ª CategoriaGrande Slam (ITF) SuperficieErba LocalitàNewport, USA ImpiantoNewport Casino CampioniSingolare maschile Richard Sears Doppio maschile Richard Sears / James Dwight 1882 1884 Gli U.S. National Championships 1883 (conosciuti oggi come US Open) sono stati la 2ª edizione degli U.S. National Championships e seconda prova stagionale dello Slam per il 1883. Si è disputato al Newport Casino di Newport negli ...

 

Medieval-era Shaivite sect in the Deccan Plateau Part of a series onShaivism DeitiesParameshvara(Supreme being) Shiva Sadasiva Bhairava Rudra Virabhadra Shakti Parvati Sati Durga Kali Ganesha Kartikeya Forms of Shiva Others Scriptures and texts Vedas Agama-Tantras Shivasutras Tirumurai Vachanas Svetasvatara Siddhanta Shikhamani Philosophy Three Components Pati Pashu Pasam Three bondages Anava Karma Maya other aspects 36 Tattvas Yoga Satkaryavada Abhasavada Svatantrya Aham Practices Vibhuti Ru...

 

Battle of Hundred Years War Battle of BlanquefortPart of the Hundred Years' WarBattle of Blanquefort, miniature from the Vigiles du roi Charles VII by Martial d'Auvergne, c. 1484Date1 November 1450LocationGasconyResult French victoryBelligerents Kingdom of England Duchy of Gascony Kingdom of FranceCommanders and leaders Gadifer Shorthose Thomas Gassiot Arnaud-Amanieu d'Albret John, Count of Penthièvre Robin PettilowStrength 7,000–10,000 men 400–3,000 menCasualties and losses 1,500–2,50...

В Википедии есть статьи о других людях с фамилией Пац. Христофор Сигизмунд Пац Канцлер великий литовский 1658 — 1684 Предшественник Альбрехт Станислав Радзивилл Преемник Марциан Александр Огинский Рождение 1621(1621) Смерть 10 января 1684(1684-01-10)Варшава Место погребения Пажайс�...

 

German biochemist Johann DeisenhoferBorn (1943-09-30) September 30, 1943 (age 81)[2]Zusamaltheim, Germany[2]CitizenshipGermany and United StatesAlma mater Technical University of Munich Max Planck Institute for Biochemistry[2] Known for Crystallography Photosynthesis AwardsMax Delbruck Prize (1986)Golden Plate Award of the American Academy of Achievement[1] (1989)Nobel Prize for Chemistry) (1988)Scientific careerFieldsBiophysics and biochemistryI...