[PYTHON] Présentation de 5 langues "deux-points" (ː ☆ 1)

introduction

De nombreux langages largement utilisés, tels que Java / C ++ / C # / JS / PHP, sont séparés par un point-virgule (;). D'autre part, il existe de nombreux langages tels que python / ruby / scala qu'il est recommandé de séparer par des sauts de ligne. Il y a beaucoup d'amateurs de langage script qui détestent le point-virgule, Certaines personnes ont l'impression de perdre en utilisant une langue séparée par des points-virgules (I).

Cela mis à part Il existe de nombreux langages qui utilisent un signe deux-points (ː) comme délimiteur pour les instructions.

Dans les grands endroits, python, objectif-c, etc. Un petit discours qui a été créé dans les années 1970. Et le langage naissant en plein essor Nim et le langage semblable à un petit discours se répandent sur Nim.

J'ai commencé à utiliser python au travail, alors j'ai commencé à utiliser ces 5 langages Il m'est arrivé de l'essayer, et tout ça J'ai remarqué que le côlon (ː) joue un rôle important à bien des égards. Pour le moment, je voudrais exposer la rédaction de la note de service, qui est également appelée la langue des deux points, comme un agent rafraîchissant pour mes frères qui sont généralement épuisés par la langue de points-virgules SI.

Ou si vous l'écrivez comme une histoire ː

«Quand vous appelez cela des langues de type deux-points, c'est un peu exagéré comme la linguistique. ――Respectez Yukorin, qui a un Goro similaire (?), Et appelez-le le langage Colon Star. ... Yukorin, en 2017, nous passerons de la route mamatale à la route mère célibataire ... ――Si vous écrivez "Colon ☆", il apparaîtra dans une sorte d'animation ...

Système colon ① python

Un langage de script typique, le python de tout le monde, utilise beaucoup la notation deux-points. Écrivez les définitions de if, for et de classe en utilisant des deux-points.

Exemple:

person.py


class Person():
    def __init__(self, name, age):
        self.name, self.age = name, age
        self.address = None

En comparant avec la série maîtresse la plus rapide de grammaire de base qui était populaire il y a longtemps, [Python Basic Grammar Fastest Master](http://d.hatena.ne.jp/dplusplus/20100126/p1 La fréquence d'utilisation des deux points dans) est plus de 10 fois supérieure à celle de Ruby Basic Grammar Fastest Master. Le style d'utilisation des délimiteurs de tabulation et des deux-points utilisé par Python est également utilisé dans certains autres langages (Boo sur .NET, Nim compilé en langages C, etc.). Je pense que Smalltalk, le langage original des deux points, est le seul de la série maîtresse la plus rapide de grammaire de base à utiliser plus fréquemment les deux points que python.

Système du côlon ② objectif-c

Objective-c est devenu trop célèbre en tant que langage de développement iOS. La notation deux points est souvent utilisée dans les parties orientées objet influencées par Smalltalk. Par exemple, la méthode setName qui prend le nom et le prix comme arguments est définie comme suit.

method.m


- (void)setName:(NSString *)name price:(NSNumber *)price {
   _name = name;
   _price = price;
}

--Source Objective-C 2.0 Basic Grammar Fastest Master #Le maître le plus rapide téléchargé il y a 2015 ans. Si vous n'utilisez pas Objective-C 2.0, il peut être recommandé pour certaines personnes. Je vais le mettre en pratique.

Pour la raison pour laquelle la notation de méthode n'est pas setName (nom, prix) même s'il s'agit d'un langage C, il est préférable de regarder le petit discours qui en était la source.

--Objective-C est entièrement compatible avec le langage C, et les fonctions C sont écrites en langage C.

Objective-C, je pense le mettre en pratique, donc j'écrirai un article dans un proche avenir:

--Objectif-C, non limité aux deux-points, symbole Osugi. .. ..

Système Colon ③ Smalltalk

Pour la signification historique de Smalltalk, voir numéro spécial de classe spéciale (NHK) de Smalltalk développeur Alankei. Je pense que.

En passant, si vous continuez à vous référer à Fastest Master, vous pouvez voir la notation Smalltalk qui utilise plus de deux-points que python.

Permettez-moi d'en citer quelques-uns:

Utilisez deux points pour définir les tableaux et accéder aux tableaux (description du sélecteur).

array.st


array := #(a b c). "Définition du tableau"
array at: 2.          "Extraction du deuxième élément du tableau=> #b "

Définition du dictionnaire et ajout au dictionnaire

dict.st


dict := Dictionary new.
dict at: #a put: 1. "Ajouter au dictionnaire"
dict at: #b put: 2. """
dict at: #c put: 3. """
dict   "=> a Dictionary(#a->1 #b->2 #c->3 ) "

Définition d'une fonction anonyme utilisant des blocs

La notation dite entre crochets est appelée un bloc, ce qui vous permet de définir une fonction anonyme.

block.st


block1 := [:a :b | a + b]. "Assignez une fonction anonyme qui prend les arguments a et b à la variable block1"
block1 value: 3 value: 4.           "Donner les valeurs 3 et 4 du bloc 1=> 7 "

Il existe une notation similaire pour objective-c, mais je pense que Smalltalk est plus intelligent. Si vous êtes intéressé, veuillez lire PPAP avec Smalltalk-76 et Squeak / Pharo ~ Comparaison de petites conférences intergénérationnelles sur 40 ans ~. Ci-dessus, touchez l'environnement d'exécution Smalltalk bien connu (Squeak / Pharo, etc.). J'ai eu "Introduction à l'environnement de programmation Squeak-Future du passé" pour 1 yen, ce qui semble être un bon livre pour apprendre l'orientation objet, donc je pense que j'écrirai quelque chose un jour. sq

Système du côlon ④ Nim

Nim, un langage typé qui utilise une structure d'indentation de type Python et est compilé en C, est un langage lourd avec deux points qui semble être mince sur Smalltalk.

Permettez-moi de citer une belle note Syntaxe de Nim:

pour et si

for.nim


for b in 1..10:
  if b == 5:
    continue
  if b == 7:
    break
  echo b
# (1, 2, 3, 4,6 et une ligne sont sorties)

Arguments de procédure (fonction) et valeurs de retour

proc.nim


proc isPositive(i: int): bool = i >= 0

Y compris les arguments de procédure et les valeurs de retour La définition de type est en notation deux-points comme java.

Si vous savez que proc est quelque chose comme la fonction JS ou allez func Ce sera facile à lire.

Exception de gestion try-except-finally

try.nim


var f: File
if open(f, "sometext.txt"):
    try:
      ...  #Quelque chose de traitement
    except SomeError:  #Si SomeError se produit dans la clause try, ici
      echo "some error"
    except AnotherError:  #Si AnotherError se produit ici
      echo "another error"
    except:  #Si vous obtenez une autre erreur ici
      echo "unknown erro"
      raise  #Si seulement augmenter, lancer la même exception
    finally:
      echo "finally"  #Doit être exécuté

La syntaxe est presque la même que celle de Python. La notation deux-points de Nim est très lisible et fonctionne rapidement. C'est le langage de compilation attendu.

Système Colon ⑤ Spry on Nim

Langage de script de style Smalltalk Spry écrit en Nim. Parce qu'il s'agit d'un langage de script de type Smalltalk qui a amélioré la compatibilité avec le langage Nim, qui a de nombreux deux-points, Spry est peut-être le candidat numéro un pour un langage secret lourd à deux points.

――Si vous connaissez une langue pleine de deux points, faites-le moi savoir.

Ci-dessous, la source est le Language Manual sur le site officiel.

Fonction func

La définition des fonctions se fait dans le goût Smalltalk. Utilisez deux points dans l'argument

func1.sy


foo = func [:x + 4]
# Prints 9 on stdout
echo foo 5

Quand il s'agit de deux arguments, cela devient une meilleure notation deux-points.

func2.sy


add:to: = func [:x + :y]
echo (add: 5 to: 6)   # prints "11"

# And a method in the same way
add:and: = method [self + :x + :y]
echo (3 add: 5 and: 6) # prints "14"

Ajoutez: ~ à: et ajoutez: ~ et: sont des descriptions de sélecteurs dans Smalltalk. Similaire à Smalltalk, la description est comme le langage naturel (anglais).

Bloc de condition

Quand il s'agit de ramification conditionnelle, if n'est pas adopté et il est écrit entre deux points. Dans d'autres langues

if a >10 then 20 else 10

Mais j'écrirais ...:

cond.sy


foo = func [:a > 10 then: [20] else: [10]]

echo foo 5  # prints 10
echo foo 12 # prints 20

Hmmm, cela semble être comme ou ne pas aimer. Cependant, la description est très concise, et ce sera amusant si elle est correctement combinée avec Nim. Une notation deux-points plus spectaculaire apparaît dans la seconde moitié du manuel.

Continuez ... peut-être.

Comme vous pouvez le voir du fait qu'il s'agit d'un remplissage dans le blanc dans le calendrier de l'Avent Nim 2016, je l'ai écrit parce que j'ai trouvé quelque chose en commun avec le système du côlon en explorant l'origine du nouveau langage Nim + Spry auquel je fais attention. Je ne pouvais pas écrire tous les détails, mais il est assez intéressant de regarder la notation deux-points de chaque langue et le concept de conception de chaque langue. En prime, je pense que les langues lourdes de deux points ont en commun que l'utilisation des points-virgules (;) et des virgules (,), qui sont souvent utilisées en java etc., est modeste (bien qu'elle ne s'applique pas à objective-c).

Après avoir approfondi la notation deux-points de chaque langue, je peux l'écrire à nouveau, donc pour le moment, j'ajouterai (ː ☆ 1) au titre comme première partie de la série ː)

Recommended Posts

Présentation de 5 langues "deux-points" (ː ☆ 1)
[Introduction à cx_Oracle] Présentation de cx_Oracle
Caractéristiques du langage de programmation [Memo]
Vue d'ensemble de Docker (pour les débutants)
La popularité des langages de programmation
Tout d'abord, un aperçu de odo (odoo 13)