Przecinek jako separator vs. przecinek jako separator


13

W tym filmie mówca mówi:

„Niektórzy ludzie są zdezorientowani tym, jak działają przecinki. Myślą, że powinny być ogranicznikami, a nie separatorami. Teraz możesz o nich myśleć w obu przypadkach.”

Nie rozumiem różnicy między ogranicznikiem a separatorem (jeśli taki istnieje). Implikacja filmu polega na tym, że teraz (że przecinki końcowe są prawidłowe) można je traktować raczej jako separatory niż separatory ...

Btw tym językiem jest JavaScript. Z mojego zrozumienia, token przecinka ma dwa znaczenia:

  • jako operator (rzadko używany)
  • jako separator (w listach argumentów i parametrów, literale tablic i obiektów itp.)

Nie jestem pewien, jak ogranicznik przecinków pasuje do tego ...


2
Dlaczego to ma znaczenie?
jfriend00

7
@ jfriend00 Jeśli istnieje różnica między ogranicznikiem a separatorem, chcę to wiedzieć ... Lubię wiedzieć rzeczy:)
Šime Vidas

3
@ jfriend00 Obejrzyj wideo. Gdyby ludzie z IE nie myśleli tak wąsko jak ty, może nie mielibyśmy jeszcze jednego snafu przenośności javascript ...
yannis

3
@ ŠimeVidas Dobre pytanie. BTW mówcą jest Douglas Crockford, starszy architekt JavaScript w Yahoo, znany z popularyzacji JSON i autor JavaScript: The Good Parts . Dobrze jest zwracać uwagę na szczegóły, zwłaszcza podczas oglądania filmu Crockford, ponieważ rzadko marnuje on oddech na rzeczy, które nie mają znaczenia.
yannis

1
@YannisRizos Tak, znam Crockford. On jest świetnym pedagogiem. :)
Šime Vidas,

Odpowiedzi:


15

Jeśli rozważasz przecinek jako separator, używasz przecinka między dwoma elementami sekwencji, aby je rozdzielić, jeśli uważasz, że jest to separator, umieszczasz go po każdym elemencie, aby wskazać, gdzie kończy się element. Zobacz poniższe przykłady:

Przecinek jako separator

var myCars = ["Saab", "Volvo", "BMW" ];

Przecinek jako separator

var myCars = ["Saab", "Volvo", "BMW", ];

Myślę, że wideo mówi, że przecinki można traktować zarówno jako separatory, jak i separatory, ponieważ oba powyższe przykłady tablic są poprawne. Z drugiej strony w Javascript możesz używać przecinka tylko jako separatora na liście parametrów funkcji, np

foo(a, b, c) // separator, OK

jest ważny, podczas gdy

foo(a, b, c,) // delimiter, NOT OK!

nie jest poprawny.

EDYTOWAĆ

O ile rozumiem, według strony wikipedii separator jest szczególnym przypadkiem separatora , a mianowicie takiego, który jest umieszczony pomiędzy różnymi regionami tekstowymi, których granice należy zaznaczyć. W rzeczywistości nazwy stron wikipedii są wartościami oddzielonymi przecinkami jako przykład użycia ograniczników. Tak więc, ogólnie rzecz biorąc, możesz używać ograniczników na różne sposoby: przed, po, po obu stronach części tekstu do oznaczenia.

Powodem, dla którego interpretowałem separator jako „znacznik wstawiany po elemencie” w kontekście Javascript, był motyw dosłowny z tablicy, która obowiązuje również w C, C ++ i Javie (myślę, że widziałem przynajmniej jedno pytanie dotyczące przepełnienie stosu dotyczące tego tematu).

Innym przykładem podobnego, ale odmiennego zastosowania znaku jest średnik jako separator instrukcji (C, C ++, Java, Ada, ...) oraz jako separator instrukcji (Pascal). W związku z tym

if (a > 0)
    printf("Positive\n");
else
    printf("Non positive\n");

jest poprawnym kodem C, podczas gdy

IF a > 0 THEN
    WriteLn('Positive'); (* Syntax error here! *)
ELSE
    WriteLn('Non positive');

nie jest prawidłowym kodem Pascal.

Może terminator byłby terminem lepszym / mniej dwuznacznym niż separator ? Np. Można sformułować cytat w następujący sposób: „Niektórzy ludzie są zdezorientowani tym, jak działają przecinki. Myślą, że powinny być terminatorami przedmiotów, a nie separatorami przedmiotów . Teraz (w wielu przypadkach) możesz o nich myśleć w obu kierunkach”.


Tak, na listach parametrów przecinek musi być użyty jako separator, podczas gdy w literałach tablicowych przecinek może być użyty jako separator lub separator. Lub w kategoriach laika: Możesz wstawić przecinek po ostatnim elemencie tablicy, ale nie musisz.
Šime Vidas,

Chociaż twoja odpowiedź dość dobrze wyjaśnia cytat z mojego pytania, strona Wikipedii dla „Delimiter” zawiera różne definicje. Zgodnie z tym artykułem separator określa granicę między regionami. Tak więc przykład „przecinek jako separator” z powyższego pytania nazywa się separatorem pola przecinka, podczas gdy przykład „przecinek jako separator” nie jest nigdzie reprezentowany na tej stronie Wiki.
Šime Vidas,

@ Šime Vidas - Wikipedia to tylko odniesienie, jak każde inne odniesienie, to nie jedyne odniesienie.
Michael Riley - AKA Gunny

@CapeCodGunny Tak, wskazuję tylko, że istnieją sprzeczne definicje. Chciałbym również zobaczyć definicje z innych odniesień.
Šime Vidas,

7

Separator zostałby umieszczony między dwiema wartościami, oddzielając je.

one,two,three

Separator ograniczyłby pole - byłoby po obu stronach.

,one,two,three,

Gdy potraktowano w ten sposób, nie ma to większego znaczenia, o ile można wyodrębnić oddzielne pola.

Jest to zupełnie inna kwestia niż użycie przecinka w języku programowania, takim jak javascript. Chodzi o rozgraniczenie / oddzielenie wartości w ciągu.


1
Ach tak, to ma sens.
Šime Vidas,

Nie zgadzam się z twoim wyjaśnieniem ogranicznika. W oparciu o twoje wyjaśnienie będzie to jeden, dwa, trzy, teraz ogranicznik jest po obu stronach.
Michael Riley - AKA Gunny

1
@CapeCodGunny - Źle interpretujesz. Podany przykład zawiera przecinek przed i po każdej wartości. Przecinki nie na samym początku i na końcu łańcucha służą jako ogranicznik końca i ogranicznik początku.
Oded

@Oded Ten artykuł w Wikipedii zawiera różne definicje. Zgodnie z tym, twoim pierwszym przykładem byłby ogranicznik pola, podczas gdy twój drugi przykład w ogóle nie jest reprezentowany w tym artykule.
Šime Vidas,

1
Słowo ostrzeżenia! var myNumbers = ['one','two','three', ];(przecinek na końcu) dałby długość tablicy jako 3, ale ze względu na przecinek z przodu var myNumbers = [,'one','two','three'];daje długość jako 4.
RBT
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.